将数据库中的关联数据加载到edit.html.erb中

时间:2010-03-10 21:50:21

标签: ruby-on-rails erb actionview

我有以下一对多关联。文档有很多章节,章节有很多项目。

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

我必须使用value属性set指定options散列,例如:

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 :(得分:0)

您对options的理解似乎不正确。 Here is它是什么:

  

输入标记上的其他选项可以作为带选项

的哈希传递

这意味着options设置了HTML标记的属性。

您没有在问题中指定您想要做什么,但我假设您想要将item.comments作为值渲染textarea标记。如果是,那么您可以使用第二个参数method(请参阅docs)并尝试此操作:

text_area(:item, :comments, :size => "20x30")
# => <textarea cols="20" rows="30" id="item_comments" name="item[comments]">
#      #{@item.comments}
#    </textarea>