向部分视图传递参数

我有一个视图,显示多个图像和这些图像的相关标记。我决定对每个图像及其标记使用部分视图,但是在将图像对象传递到部分视图时遇到了麻烦。下面是主视图的相关代码:

<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>

我在 这个线程中读到,我可以按照当前的方式传递图像对象。我尝试通过 Render 方法上的选项散列传递 id,但也没有成功。我得到的错误是:

undefined method `model_name' for Symbol:Class

在主视图中,以我调用 render: part 的行为中心。

75084 次浏览
<%= render partial: "image_tag", locals: {image: i} %>

就是如何将变量传递给局部变量。

您还可以将整个对象传递给如下所示的分部:

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

在你的例子中,你可以用图像代替 i,用你的偏导数来代替偏导数。在部分内部,它可以访问与部分名称同名的局部变量。因此,如果您的部分名称是“ image”,局部变量 image 将是您传入的对象。

编辑: 查看 Rail 指南看起来像是在 Rails3中,the: object 现在是作为一个实例变量访问的,而不是局部的 so@image。

对于那些可能无法将值发送到局部数据库的用户,还需要考虑其他事项。如果你省略了“部分”:在你的部分路径之前,像这样... :

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

... 似乎你不能直接访问局部哈希值。相反,你需要做以下事情:

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

但是,包括「部分」 :在您的部分路径之前,如下所示... :

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

允许您直接访问散列值,如下所示:

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

只是一些需要考虑的问题,当我试图访问局部哈希值时,我被这个问题绊倒了,并意识到我忽略了 “部分”组件。