将参数传递给局部视图

jne*_*son 65 ruby-on-rails ruby-on-rails-3

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

<table>
  <% @images.each do |i| %>
    <tr>
      <%= render :partial => :image_tag, :image => i %>
    </tr>
  <% end %>
</table>
Run Code Online (Sandbox Code Playgroud)

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

<table>
  <%= image.id %>
  <%= image_tag image.src %>
</table>
Run Code Online (Sandbox Code Playgroud)

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

undefined method `model_name' for Symbol:Class
Run Code Online (Sandbox Code Playgroud)

以我在调用渲染的行为中心:在主视图中为partial.

vin*_*ceh 97

<%= render partial: "image_tag", locals: {image: i} %>
Run Code Online (Sandbox Code Playgroud)

是如何将变量传递给partials.


MFa*_*mer 63

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

<%= render 'my_partial', :locals => {:greeting => 'Hello world', :x => 36} %>
Run Code Online (Sandbox Code Playgroud)

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

<div>
  <h1> <%= locals[:greeting] %> , my x value is <%= locals[:x] %> </h1>
</div>
Run Code Online (Sandbox Code Playgroud)

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

<%= render partial: 'my_partial', :locals => {:greeting => 'Hello world', :x => 36} %>
Run Code Online (Sandbox Code Playgroud)

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

<div>
  <h1> <%= greeting %> , my x value is <%= x %> </h1>
</div>
Run Code Online (Sandbox Code Playgroud)

只是要考虑的事情,当我试图访问locals哈希值并且意识到我省略了'partial:'组件时,我被这个问题绊倒了.


Mse*_*enb 11

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

<%= render :partial => "partialpath", :object => :image %>
Run Code Online (Sandbox Code Playgroud)

您将在您的情况下将my替换为image,并使用您调用partial的部分路径替换部分路径.在partial中,它可以访问一个与partials名称同名的局部变量.因此,如果您的部分名称是"图像",则局部变量图像将是您传入的对象.

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

  • 我不认为你的`编辑:`是正确的.[Quoting](http://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables):*在以前版本的Rails中,默认局部变量将查找与partial in同名的实例变量父母.这种行为在2.3中已被弃用,并已在Rails 3.0中删除.*在你的回答中,作为`:object`传递的对象的值将在partial内部作为名为`partialpath`的局部变量(不是`@ partialpath`)访问,`@ image`或`image`) (2认同)