Ruby on rails 向局部视图传递参数

Ruby on rails 向局部视图传递参数,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有一个视图,可以显示多个图像以及这些图像的关联标记。我决定对每个图像及其标记使用局部视图,但在将图像对象传递到局部视图时遇到问题。以下是主视图的相关代码: <table> <% @images.each do |i| %> <tr> <%= render :partial => :image_tag, :image => i %> </tr> <% end %> </t

我有一个视图,可以显示多个图像以及这些图像的关联标记。我决定对每个图像及其标记使用局部视图,但在将图像对象传递到局部视图时遇到问题。以下是主视图的相关代码:

<table>
  <% @images.each do |i| %>
    <tr>
      <%= render :partial => :image_tag, :image => i %>
    </tr>
  <% end %>
</table>
以我在主视图中调用render:partial的行为中心。


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

是将变量传递给分部的方式。

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

<%= render :partial => "partialpath", :object => :image %>
“partialpath”,:object=>:image%>
在你的例子中,你会用image替换i,用partial路径替换partial路径。在partials中,它可以访问与partials名称同名的局部变量。因此,如果您的partials名称是“image”,则局部变量image将是您传入的对象


编辑:查看rails指南就像在rails 3中一样:对象现在作为一个实例变量而不是本地变量进行访问,因此@image将是您在部分中使用的

>P>>P>>P>>P>>P>>P>>P>>P>>P>>P>>P>>P>>P>>P>>P>>P>>P>>P>>P>strong>如果在部分路径之前省略“partial:”,就像这样…:

<%= render 'my_partial', :locals => {:greeting => 'Hello world', :x => 36} %>
{:greeting=>'helloworld',:x=>36}%>
…您似乎无法直接访问本地哈希值。相反,您需要执行以下操作:

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

,我的x值是
但是,在部分路径之前包含“partial:”,如下所示:

<%= render partial: 'my_partial', :locals => {:greeting => 'Hello world', :x => 36} %>
{:greeting=>'helloworld',:x=>36}%>
…允许您直接访问哈希值,如下所示:

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

,我的x值是

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

我实际上已经有了这个,并且得到了我当前所犯的完全相同的错误。还有什么原因导致了这个问题?我猜“image_tag”是rails的一个助手方法,并且与您的部分名称冲突。考虑到上下文,您是否尝试过重命名您的部分?公平点,但我只在问题中添加了“图像”以保持简单。我的实际代码的名称不同,所以这不是问题所在。您能否确保您实际上传递了正确的项,并确保@items实际上是您所认为的?在呈现您的部分之前,请执行一些
放置
语句以确保,一些
语句放置在您的部分的顶部。您还可以尝试将整个
@图像
传入并检查吗?当我需要弄清楚变量的情况时,我就是这么做的。让我们保持联系!:)嗯,我知道了。问题是我将分部的视图名称作为符号而不是字符串。一旦我将“render:partial=>:image_-tag”更改为“render:partial=>”image_-tag”,一切都解决了。不知道为什么符号表示不起作用,但感谢您的帮助!我认为您的
编辑:
不正确:在Rails的早期版本中,默认的局部变量将查找与父级中的partial具有相同名称的实例变量。此行为在2.3中被弃用,并在Rails 3.0中被删除。在您的回答中,作为
:object
传递的对象的值将作为名为
partialpath
(不是
@partialpath
@image
image
)的局部变量在分部中进行访问。您保存了我。谢谢pithier rails 4语法
<%= render partial: 'my_partial', :locals => {:greeting => 'Hello world', :x => 36} %>
<div>
  <h1> <%= greeting %> , my x value is <%= x %> </h1>
</div>