Tengo lo siguiente.campo Hash serializado y formulario simple
class Page < ActiveRecord::Base
belongs_to :category
serialize :fields
end
El valor de fields
dependerá de la categoría. Pero como un ejemplo;
{"address" => "8 finance street, hong kong",
"founded" => "1973"}
En este ejemplo, la categoría ha definido "address"
y "founded"
como los campos personalizados.
Lo que quiero decir es;
= simple_form_for(@page) do |f|
= f.association :category
- f.object.category.fields.each do |field|
= f.input field.name
Pero tengo que hacer algo mágico que lidiar con el hecho de que @page.founded
no es válida
En lugar de eso debe mirar @page.fields["founded"]
.
¿Alguna sugerencia?
Actualización:
tengo un poco más cerca
- if f.object.category
- f.object.category.fields.each do |field|
= f.input field.name do
= text_field_tag "post[fields][#{field.name}]", f.object.fields[file.name]
ahora tiene que hacer esta secadora (no desee especificar el nombre del objeto).
Veré si puedo escribir una extensión decente de forma simple para esto.
+1 para los campos "f.simple_fields_for: OpenStruct.new (@ page.fields) do | ff |". Arruine mi cerebro muchas horas para descubrir por qué no recuperaba los valores correctamente hasta que agregué el bit de OpenStruct. – gk0r
Esto es increíble. Una nota adicional para los usuarios de parámetros potentes: debe definir cada campo que agregue explícitamente. Por ejemplo, 'params.require (: page) .permit (: fields => [: address,: founded])' –
Thx para la solución, funciona perfectamente, con una excepción: No sé, cómo agregar validación errores a '@ page.fields'. –