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