Cargando datos de asociación de base de datos en edit.html.erb
-
19-09-2019 - |
Pregunta
Tengo el siguiente a muchas asociaciones. El documento tiene muchas secciones y la Sección tiene muchos artículos.
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
Y el 'editar' la acción de la siguiente manera: -
def edit
@document = Document.find(params[:id])
end
Aquí es el 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 %>
Tengo que especificar las opciones de hash con el atributo de valor establecido, por ejemplo:
options = {:value => item.comments}
con el fin de mostrar los comentarios de artículo al hacer clic en el enlace 'Editar' para modificar los comentarios del artículo. ¿No deberían ser cargados por defecto, lo que parece ser el caso de comentarios de cabecera.
Gracias por responder. Sí, quiero hacer que el área de texto con el valor item.comments de la base de datos. El código de abajo que tenía, no carga los comentarios.
<% s.fields_for :item, :index => item.id do |i| %>
<p>
<%= i.text_area :comments %>
</p>
<% end %>
¿Me puede explicar por qué
<%= text_area(:item, :comments) %>
obras, sino
<%= i.text_area :comments %>
no lo hace. Gracias mucho.
Solución
Parece que su comprensión de options
no es correcto. Aquí es lo que es:
opciones adicionales en la etiqueta de entrada se pueden pasar como un hash con opciones
Lo que significa que los conjuntos options
atributos de la etiqueta HTML.
No se ha especificado qué es exactamente lo que quiere hacer en la pregunta, pero supongo que desea renderizar la etiqueta área de texto con item.comments como un valor. Si es así, se puede utilizar el segundo parámetro method
(ver los documentos href="http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#M001611" ) e intente esto:
text_area(:item, :comments, :size => "20x30")
# => <textarea cols="20" rows="30" id="item_comments" name="item[comments]">
# #{@item.comments}
# </textarea>