rails ruby-on-rails ruby-on-rails-3 formtastic nested-attributes activeadmin

ruby-on-rails - rails - add activeadmin gem



Rails ActiveAdmin forma anidada has_one accept_attributes_for formtastic issue (3)

Estoy usando ActiveAdmin y Rails 3.1: tengo problemas para entender si el siguiente es un error o si hay alguna forma de hacerlo correctamente que no entiendo. Estoy tratando de usar un modelo anidado con un tiene una relación, por lo que puedo crear una página y completar sus metadatos en 1 paso. - (página has_one meta_data, accept_nested_attributes_for meta_data)

Ejemplo 1) en este ejemplo, cuando hago clic en una página nueva, la sección de metadatos está ahí pero no hay campos de entrada. Además, si edito el registro, se muestra correctamente, sin embargo, el conjunto de campos se duplica en la segunda sección. . y si elimino f.inputs wrapping semantic_field_for (lo que tendría sentido), entonces se rompe completamente y no muestra nada en el área de metadatos ...

form do |f| f.inputs "Page Information" do f.input :name f.input :uri f.input :view f.input :body, :as => :text f.input :active end f.inputs "Meta Data" do f.semantic_fields_for :meta_data do |meta_form| meta_form.inputs :title, :description, :keywords, :name => "Meta Information" end end end

Entiendo que los metadatos probablemente no están siendo instanciados, pero no estoy seguro de cómo se supone que debo hacer eso en el bloque de formularios. (o si puedo hacerlo): la única forma en que puedo hacer que esto funcione es mediante el uso de un formulario personalizado y la construcción de los metadatos en la vista, que se ve así

2) Como estoy trabajando alrededor de eso, pero parece hacky

<%= semantic_form_for [:admin, @page] do |f| %> <% @page.build_meta_data %> <%= f.inputs :name => "Page Information" do %> <%= f.input :name %> <%= f.input :uri %> <%= f.input :view %> <%= f.input :body, :as => :text %> <%= f.input :active %> <% end %> <%= f.semantic_fields_for :meta_data do |meta_form| %> <%= meta_form.inputs :title, :description, :keywords, :name => "Meta Information" %> <% end %> <%= f.buttons %> <% end %>

Gracias de antemano por cualquier ayuda o aclaración.

(nota a los moderadores comencé otro hilo en esto, pero no era tan claro y no tenía la solución alternativa que tengo ahora, así que si una de las preguntas debería eliminarse, elimine la otra)


En los carriles 4, esto es algo que funciona, con un bonito diseño.

Por ejemplo, un cliente tiene una cuenta.

model / customer.rb

accepts_nested_attributes_for :account

admin / customer.rb

form do |f| f.inputs do f.input :user, input_html: { disabled: true } f.input :name f.input :address f.input :city f.input :country, as: :string end f.buttons f.inputs "Account Information", for: [:account, f.object.account] do |s| s.input :active, as: :boolean s.input :subscription, as: :boolean s.input :expires_on, as: :datepicker s.actions end end controller do def permitted_params params.permit! end end end


Encontré una mejor solución para ti. Puede utilizar :for opción en inputs ayuda.

f.inputs "Meta Data", for: [:meta_data, f.object.meta_data || MetaData.new] do |meta_form| meta_form.input :title meta_form.input :description meta_form.input :keywords end

Creo que esto podría funcionar también, pero no lo comprobé

f.inputs :title, :desctiption, :keywords, name: "Meta Data", for: [:meta_data, f.object.meta_data || MetaData.new]


Estaba teniendo el mismo problema, trabajé en tu hack y lo hice funcionar. Luego moví <% @page.build_meta_data %> a un nuevo método personalizado como este

controller do def new @tenant = Tenant.new @tenant.build_tenant_configurable end end

espero que esto ayude