Ich habe eine Ansicht, in der mehrere Bilder und die zugehörigen Tags dieser Bilder angezeigt werden. Ich habe beschlossen, für jedes Bild und seine Tags eine Teilansicht zu verwenden, habe jedoch Probleme, das Bildobjekt in die Teilansicht zu übertragen. Hier ist der relevante Code der Hauptansicht:
<table>
<% @images.each do |i| %>
<tr>
<%= render :partial => :image_tag, :image => i %>
</tr>
<% end %>
</table>
Hier ist der relevante Code der Teilansicht (die Teilansicht heißt _image_tag.html.erb):
<table>
<%= image.id %>
<%= image_tag image.src %>
</table>
Ich habe in diesem Thread gelesen, dass ich das Bildobjekt so übergeben kann, wie ich es gerade mache. Ich habe versucht, die ID über einen Options-Hash für die Render-Methode zu übergeben, und das hat auch nicht funktioniert. Der Fehler, den ich bekomme, ist:
undefined method `model_name' for Symbol:Class
zentriert um die Linie, in der ich rendere: teilweise in der Hauptansicht.
quelle
puts
Anweisungen, bevor Sie Ihren Teil rendern, um sicherzugehen, und einigeputs
Aussagen in Ihrem Teil ganz oben. Können Sie auch versuchen, das GANZE einzureichen@images
und einzuchecken? Dies ist, was ich tue, wenn ich herausfinden muss, was mit Variablen los ist. Halten uns auf dem Laufenden! :)Noch etwas zu beachten für diejenigen, die möglicherweise Probleme haben, Werte an einen Teil zu senden. Wenn Sie das 'partielle:' vor Ihrem partiellen Pfad weglassen , wie folgt ...:
<%= render 'my_partial', :locals => {:greeting => 'Hello world', :x => 36} %>
... Sie können anscheinend nicht direkt auf die lokalen Hash-Werte zugreifen. Vielmehr müssten Sie Folgendes tun:
<div> <h1> <%= locals[:greeting] %> , my x value is <%= locals[:x] %> </h1> </div>
Jedoch einschließlich der ‚Teil:‘ vor Ihrem partiellen Pfad ein, wie folgt ...:
<%= render partial: 'my_partial', :locals => {:greeting => 'Hello world', :x => 36} %>
... ermöglicht Ihnen den direkten Zugriff auf die Hash-Werte wie folgt:
<div> <h1> <%= greeting %> , my x value is <%= x %> </h1> </div>
Nur etwas zu beachten, ich wurde von diesem Problem überrascht, als ich versuchte, auf die lokalen Hash-Werte zuzugreifen, und stellte fest, dass ich die Komponente 'partiell:' weggelassen hatte .
quelle
<%= render partial: 'my_partial', locals: {greeting: 'Hello world', x: 36} %>
Sie können das gesamte Objekt auch wie folgt an einen Teil übergeben:
<%= render :partial => "partialpath", :object => :image %>
Sie würden i in Ihrem Fall durch image und partiellen Pfad durch das ersetzen, was Ihr partieller heißt. Innerhalb des Teils hätte es Zugriff auf eine lokale Variable mit demselben Namen wie der Teilname. Wenn Ihr Partialname also "image" lautet, ist das lokale Variablenbild das Objekt, das Sie übergeben.
BEARBEITEN: Wenn Sie sich die Rails-Hilfslinien ansehen, sehen Sie wie in Rails 3 aus. Auf das Objekt: wird jetzt als Instanzvariable anstatt als lokale Variable zugegriffen, sodass @image das ist, was Sie im Teil verwenden.
quelle
EDIT:
richtig bist. Zitat : In früheren Versionen von Rails suchte die lokale Standardvariable nach einer Instanzvariablen mit demselben Namen wie der Teil im übergeordneten Element . Dieses Verhalten war in 2.3 veraltet und wurde in Rails 3.0 entfernt. In Ihrer Antwort hat der Wert des Objekts , wie:object
wird in dem Teil als lokaler Variable mit dem Namen zugänglich seinpartialpath
(nicht@partialpath
,@image
oderimage
)