Frage

Ich habe folgende eine bis viele Assoziationen. Dokument hat viele Abschnitte und Abschnitt hat viele Artikel.

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

Und die 'Bearbeiten' Aktion wie folgt: -

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

Hier ist die 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 %>

Ich habe, um die Optionen angeben Hash mit dem Wert Attribute gesetzt, für zB:

options = {:value => item.comments} 

, um die Artikel Kommentare zu zeigen, wenn ich Sie auf den Link ‚Bearbeiten‘ den Punkt Kommentare zu ändern. Sollten sie nicht standardmäßig geladen werden, was der Fall für Kopf Kommentare zu sein scheint.

Vielen Dank für die Beantwortung. Ja, ich mag den Textbereich mit dem item.comments Wert aus der Datenbank machen. Der Code unten ich hatte, nicht die Kommentare laden.

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

können Sie mir erklären, warum

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

funktioniert, aber

<%= i.text_area :comments %> 

nicht. Dank viel.

War es hilfreich?

Lösung

Es scheint, Ihr Verständnis von options nicht korrekt ist. Hier , was es ist:

  

Zusätzliche Optionen auf dem Input-Tag können als Hash mit Optionen übergeben werden

Was bedeutet, dass options Sätze für die HTML-Tag-Attribute.

Sie hat nicht angegeben, was genau Sie in der Frage tun wollen, aber ich nehme an, Sie Textarea-Tag mit item.comments als Wert machen möchten. Wenn ja, dann können Sie den zweiten Parameter method (siehe die docs rel="nofollow ) und versuchen Sie dies:

text_area(:item, :comments, :size => "20x30")
# => <textarea cols="20" rows="30" id="item_comments" name="item[comments]">
#      #{@item.comments}
#    </textarea>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top