0

基于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不明白的说明信息到部分(或我不正确传递)。什么是正确的做法呢?

回答

1

解决了它。插图对象可以从部分内部访问,如下所示。无需将其传递给:locals散列。

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

uuhh ... eewwwww :)恕我直言,这是远远更好的传递`illustration`为本地。 – Zabba 2011-01-06 08:37:22

0

你,因为你是在unless访问使用:当地有误符号。

误差

undefined method `illustration' for :illustration:Symbol 

意味着红宝石看了在Symbol类的实例名为illustration方法;该方法显然不意味着存在于Symbol类中。

访问传入的本地变量的方法很简单,就是illustration.whatever.whatever(不使用:!)。