将parameter passing给局部视图

我有一个观点,显示多个图像和这些图像的相关标签。 我决定使用每个图像及其标签的局部视图,但我无法将图像对象传入局部视图。 以下是主视图的相关代码:

<table> <% @images.each do |i| %> <tr> <%= render :partial => :image_tag, :image => i %> </tr> <% end %> </table> 

以下是部分视图的相关代码(局部视图名为_image_tag.html.erb):

 <table> <%= image.id %> <%= image_tag image.src %> </table> 

我在这个线程中读到,我可以按照我目前正在执行的方式传递图像对象。 我尝试通过在渲染方法的选项哈希id传递,也没有工作。 我得到的错误是:

 undefined method `model_name' for Symbol:Class 

围绕我所说的线渲染:在主视图中是局部的。

 <%= render partial: "image_tag", locals: {image: i} %> 

是你如何将variables传递给partials。

对于那些可能无法将值发送给部分的人,还有其他要考虑的事情。 如果您在部分path之前省略“部分” ,就像这样…:

 <%= render 'my_partial', :locals => {:greeting => 'Hello world', :x => 36} %> 

…似乎你将无法直接访问本地哈希值。 相反,您需要执行以下操作:

 <div> <h1> <%= locals[:greeting] %> , my x value is <%= locals[:x] %> </h1> </div> 

然而,在你的部分path之前包括“partial:” ,就像下面的…:

 <%= render partial: 'my_partial', :locals => {:greeting => 'Hello world', :x => 36} %> 

…允许您直接访问哈希值,如下所示:

 <div> <h1> <%= greeting %> , my x value is <%= x %> </h1> </div> 

只是需要考虑一下,当我尝试访问本地散列值时,我被这个问题绊倒了,并且意识到我省略了“partial:”组件。

您也可以将整个对象传递给像这样的部分:

 <%= render :partial => "partialpath", :object => :image %> 

你会用你的案例和部分path中的图像replace我,不pipe你的部分被调用。 在部分内部,它将有权访问与部分名称相同名称的局部variables。 因此,如果您的部分名称是“图像”,则局部variables图像将成为您传入的对象。

编辑:看轨道指南看起来像在轨道3:对象现在作为一个实例variables而不是本地访问,所以@image将是你在部分使用。