2010-03-10 2 views
0

다음과 같은 일대 다 연관이 있습니다. 문서에는 많은 섹션이 있고 섹션에는 많은 항목이 있습니다.데이터베이스에서 연관 데이터를 edit.html.erb로로드하십시오.

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 값을 사용하여 텍스트 영역을 렌더링하려고합니다. 아래 코드는 주석을로드하지 않습니다.

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

작동하지만

<%= i.text_area :comments %> 

하지 않는 이유

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

당신은 나를 설명 할 수있다. 감사합니다.

답변

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>