如何将其他信息传递给嵌套表单部分?

时间:2011-01-06 07:59:31

标签: ruby-on-rails ruby-on-rails-3 partial-views nested-forms

基于Railscast 196197,我创建了一个嵌套表单,用于向我的文章模型添加多个插图(图像附件)。我有一个这样的表格:

<%= form_for @article, :html => { :multipart => true } do |f| %>  
  <h2>Illustrations</h2>
  <% for illustration in @article.illustrations %>    
    <%= f.fields_for :illustrations, illustration do |builder| %>  
       <%= render :partial => "illustration_fields", 
         :locals => { :f => builder, :illustration => illustration } %>
    <% end %>
  <% end %>
  <p>  
    <%= f.submit "Submit" %>  
  </p>
<% end %>

_illustration_fields部分看起来像这样:

<div class="fields">
  <p>
    <%= f.label :illustration, "Illustration" %><br />
    <%= link_to_remove_fields "remove", f %><br />
    <%= f.file_field :illustration %>  
  </p>
</div>

如果插图已经存在,我想在图片标记内的页面上显示它。我尝试在部分内部显示图像:

<% unless :illustration.illustration.blank? %>
   <%= image_tag(:illustration.illustration.url) %>
<% end %>

但它引发了一个错误:

undefined method `illustration' for :illustration:Symbol

插图字段肯定存在于插图模型中,因为我可以在主窗体中显示图像,如下所示:

<% unless illustration.illustration.blank? %>
  <%= image_tag(illustration.illustration.url) %>
<% end %>

似乎Rails不能将插图信息理解为部分(或者我没有正确传递)。解决这个问题的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

解决了它。可以从partial内部访问插图对象,如下所示。无需在:locals哈希中传递它。

<% unless f.object.illustration.blank? %>
  <%= image_tag(f.object.illustration.url) %>
<% end %>

答案 1 :(得分:0)

您收到了代码错误,因为您使用:中的unless访问了本地。

错误

undefined method `illustration' for :illustration:Symbol

表示Ruby在illustration类的实例上查找名为Symbol的方法;这个方法显然不存在于Symbol类中。

访问传入的局部变量的方法只是illustration.whatever.whatever(不使用:!)。