Ho il seguente.Campo hash serializzato e modulo semplice
class Page < ActiveRecord::Base
belongs_to :category
serialize :fields
end
Il valore di fields
dipende dalla categoria. Ma ad esempio;
{"address" => "8 finance street, hong kong",
"founded" => "1973"}
In questo esempio la categoria ha definito "address"
e "founded"
come i campi personalizzati.
Quello che voglio è dire;
= simple_form_for(@page) do |f|
= f.association :category
- f.object.category.fields.each do |field|
= f.input field.name
ma ho bisogno di fare qualcosa di magico a che fare con il fatto che non è valida @page.founded
Invece dovrebbe essere guardando @page.fields["founded"]
.
Qualche suggerimento?
Aggiornamento:
devo un po 'più vicino
- 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]
ora necessario rendere questa biancheria (non si vuole specificare il nome dell'oggetto).
Vedrò se riesco a scrivere un'estensione di modulo semplice decente per questo.
+1 per "f.simple_fields_for: fields, OpenStruct.new (@ page.fields) do | ff |". Ho distrutto il mio cervello più di un'ora per capire perché non stava recuperando i valori correttamente fino a quando ho aggiunto il bit OpenStruct. – gk0r
È fantastico. Una nota aggiunta per gli utenti con parametri forti: è necessario definire ciascun campo aggiunto in modo esplicito. Ad esempio, 'params.require (: page) .permit (: fields => [: address,: found])' –
Thx per la soluzione, funziona perfettamente, con una eccezione: non so, come aggiungere la convalida errori in '@ page.fields'. –