Как передать дополнительную информацию в частичную вложенную форму? - PullRequest
0 голосов
/ 06 января 2011

На основе Railscast 196 и 197 я создал вложенную форму для добавления нескольких иллюстраций (вложений изображений) в модель статьи. У меня есть такая форма:

<%= 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 ]

1 голос
/ 06 января 2011

Решил это.К объекту иллюстрации можно получить доступ изнутри частичного следующим образом.Не нужно передавать его внутри хеша :locals.

<% unless f.object.illustration.blank? %>
  <%= image_tag(f.object.illustration.url) %>
<% end %>
0 голосов
/ 06 января 2011

Вы получили ошибку символа, потому что вы получаете доступ к локальной сети с помощью : в unless.

Ошибка

undefined method `illustration' for :illustration:Symbol

означает, что Ruby искал метод с именем illustration в экземпляре класса Symbol; очевидно, что метод не должен существовать в классе Symbol.

Способ доступа к локальной переменной, который передается, просто illustration.whatever.whatever (никакой : не используется!).

...