__ "Ich möchte den Namen vom ActiveHash-Modell erhalten, erhalte jedoch einen undefinierten Fehler und kann ihn nicht erhalten ..." __
Für solche Leute werde ich erklären, wie man den ActiveHash-Namen gewaltsam erhält und warum man den Namen überhaupt nicht bekommen kann.
Wenn Sie neu in der Programmierung sind, würden wir uns freuen, wenn Sie sich darauf beziehen könnten. (Für diejenigen, die wissen, warum der Fehler auftritt, ist dieser Artikel nutzlos. Es tut mir leid.)
・ Überprüfen Sie, wie Sie mit ActiveHash normale Werte erhalten -Lernen Sie, wie Sie mit der find-Methode den Wert aus dem ActiveHash-Modell abrufen · Verstehen Sie, warum Undefind-Fehler auftreten
sushi.rb
class Sushi < ActiveHash::Base
self.data = [
{ id: 1, name: 'fetter Thunfisch' },
{ id: 2, name: 'Mittlerer Toro' },
{ id: 3, name: 'Lachsrogen' },
{ id: 4, name: 'Conger Aal' },
{ id: 5, name: 'Engawa' },
{ id: 6, name: 'Seeigel' },
{ id: 7, name: 'Der Tintenfisch' }
]
end
rhtml:lunch.html.erb
<%= @shari.sushi.name %>
<!--@ Sharis Sushi_Wenn die ID "4" ist, wird "Anako" angezeigt.-->
Mit einer solchen Beschreibung können Sie den Wert des mit @ shari.sushi_id verknüpften Namens aus dem ActiveHash-Modell abrufen. (Die Beschreibung des Modells wird diesmal weggelassen.)
Unter bestimmten Bedingungen __ kann das name-Element von ActiveHash jedoch nicht abgerufen werden.
undefined method '〇〇' for …
In einigen Fällen kann ein Fehler auftreten.
In einem solchen Fall werde ich Ihnen erklären, wie Sie den Wert zwangsweise aus dem ActiveHash-Modell abrufen können.
rhtml:lunch.html.erb
<%= Sushi.find(@shari.neta_id).name %>
"Ich habe einen Fehler erhalten, möchte aber ein Active Hash-Modell schreiben und es verwenden ..."
Die empfohlene Methode besteht darin, die __find-Methode zu verwenden, um __ zwangsweise abzurufen.
(1) Übergeben Sie die ID, die Sie erhalten möchten, an das Argument der find-Methode und suchen Sie im Sushi-Modell (ActiveHash) nach @ shari.neta_id. (2) Ich möchte den Namen der erworbenen ID, also werde ich am Ende .name hinzufügen. (3) Aus dem Sushi-Modell können Sie das Namenselement erhalten, das mit @ shari.neta_id übereinstimmt.
Es ist ein bisschen Brute Force, aber Sie können diese Methode verwenden, um das angegebene Namenselement abzurufen. Seien Sie jedoch vorsichtig, wenn Sie es verwenden, da der Code in der Regel redundant ist.
rhtml:new.html.erb
<%= form.select :neta_id,[["Stöcker",1],["Kohada",2],["Roter Mutsu",3],["Amadai",4]] %>
rhtml:lunch.html.erb
<% case @shari.neta_id %>
<% when 1 then %>
<p>Stöcker</p>
<% when 2 then %>
<p>Kohada</p>
<% when 3 then %>
<p>Roter Mutsu</p>
<% when 4 then %>
<p>Amadai</p>
<% end %>
"Die Menge an Beschreibungen ist gering und es muss nicht ActiveHash sein ..."
Wenn Sie den Pulldown-Teil in form.select und den Anzeigeteil in der case-Anweisung beschreiben, können Sie einen Pseudo-ActiveHash-ähnlichen Ausdruck erstellen.
Es wird jedoch empfohlen, diese Methode nur zu verwenden, wenn nur wenige Auswahlmöglichkeiten vorhanden sind, da der Umfang der Beschreibung mit zunehmender Auswahl sehr groß wird und die Lesbarkeit des Codes beeinträchtigt werden kann.
Wenn __ "Der Modellname des ActiveHash-Modells stimmt nicht mit dem Spaltennamen überein" __, kann das name-Element nicht auf kanonische Weise abgerufen werden.
Wenn der Spaltenname sushi_id (ganzzahliger Typ) lautet, muss der ActiveHash-Modellname auch Sushi.rb sein. Im Fall von (1) oben können Sie den Wert von Sushi.rb nicht in Form von neta.name abrufen, auch wenn Sie versuchen, ihn abzurufen.
Stellen Sie beim Erstellen eines ActiveHash-Modells zum Erstellen von Pulldowns und Kontrollkästchen sicher, dass der Modellname und der Spaltenname identisch sind.
(1) ActiveHash kann das name-Element mit .name nur abrufen, wenn der Modellname und der Spaltenname vorhanden sind. (2) Wenn Sie den Wert aus dem Modell eines anderen Namens abrufen möchten, können Sie das name-Element mithilfe von find abrufen. (3) Wenn die Beschreibung selbst (Auswahlmöglichkeiten) klein ist, gibt es auch eine Methode, um sie mit form.select und when auszudrücken.
Danke, dass du bis zum Ende zugesehen hast. Lass uns weiter hart lernen!
Recommended Posts