将参数传递给局部视图

时间:2011-07-12 23:32:10

标签: ruby-on-rails ruby-on-rails-3

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

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

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

undefined method `model_name' for Symbol:Class

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

3 个答案:

答案 0 :(得分:95)

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

是如何将变量传递给partials的。

答案 1 :(得分:59)

对于那些可能在将值发送到部分时遇到问题的人需要考虑的其他事项。 如果您在部分路径之前省略'partial:',就像这样......:

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

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

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

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

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

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

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

需要考虑的一点是,在尝试访问本地哈希值时,我遇到了这个问题,并意识到我省略了'partial:'组件。

答案 2 :(得分:11)

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

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

你会用你的情况下的图像替换i和部分路径,而不管你的部分被调用。在partial中,它可以访问一个与partials名称同名的局部变量。因此,如果您的部分名称是“图像”,则局部变量图像将是您传入的对象。

编辑:看看rails指南看起来像在rails 3中:对象现在作为实例变量而不是本地访问,因此@image将是你在partial中使用的。