Загрузка данных ассоциации из базы данных в edit.html.erb - PullRequest
0 голосов
/ 11 марта 2010

У меня есть следующая связь со многими. В документе много разделов, а в разделе много элементов.

class Document < ActiveRecord::Base
  has_many :document_sections, :dependent => :destroy, :autosave => true
  has_many :document_items, :through => :document_sections
end

class DocumentSection < ActiveRecord::Base
  belongs_to :document
  has_many :document_items, :dependent => :destroy, :autosave => true
end

class DocumentItem < ActiveRecord::Base
  belongs_to :document_section
end

И действие «изменить» выглядит следующим образом: -

def edit
  @document = Document.find(params[:id])
end

Вот edit.html.erb

<h1>Edit!</h1>

<% form_for(@document) do |f| %>
<%= f.error_messages %>

<p>
 <p> Header Comment <p/><br />
 <%= f.text_field :comment %>      
 <%= f.hidden_field :uid %>
</p>

<% @document.document_sections.each do |section| %>
 <% f.fields_for :section, :index => section.id  do |s| %>
  <p>
   <%= s.hidden_field :seqnum, options = {:value => section.seqnum} %>  
  </p>

  <% section.document_items.each do |item| %>
   <% s.fields_for :item, :index => item.id do |i| %>
      <p>
       <%= i.text_area :comments, options = {:value => item.comments} %> 
      </p>
   <% end %>
  <% end %>

 <% end %>
<% end %>
<p>
 <%= f.submit "Submit Comments" %>
</p>

<% end %>

Я должен указать хэш опций с установленным атрибутом значения, например:

options = {:value => item.comments} 

для отображения комментариев элемента, когда я нажимаю ссылку «редактировать», чтобы изменить комментарии элемента. Не должны ли они быть загружены по умолчанию, что, как представляется, имеет место для комментариев заголовка.

Спасибо за ответ. Да, я хочу отобразить текстовую область со значением item.comments из базы данных. Приведенный ниже код не загружает комментарии.

<% s.fields_for :item, :index => item.id do |i| %>
 <p>
  <%= i.text_area :comments %> 
 </p>
<% end %>

Вы можете объяснить мне, почему

<%= text_area(:item, :comments) %> 

работает, но

<%= i.text_area :comments %> 

нет. Большое спасибо.

1 Ответ

0 голосов
/ 11 марта 2010

Кажется, ваше понимание options неверно. Вот что это:

Дополнительные параметры тега ввода могут быть переданы в виде хэша с параметрами

Это означает, что options устанавливает атрибуты для тега HTML.

Вы не указали, что именно вы хотите сделать в вопросе, но я предполагаю, что вы хотите отобразить тег textarea с item.comments в качестве значения. Если это так, то вы можете использовать второй параметр method (см. документы ) и попробовать это:

text_area(:item, :comments, :size => "20x30")
# => <textarea cols="20" rows="30" id="item_comments" name="item[comments]">
#      #{@item.comments}
#    </textarea>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...