Ich versuche, einen Hash der Optionen in einem einzelnen DB-Feld zu speichern. Das Formular ist in der Lage, die Daten in der DB zu speichern, aber nicht in der Lage, es wieder zu erhalten, wenn ich es bearbeite (z. B. sind alle anderen Felder mit Ausnahme der Felder wp_options bereits ausgefüllt).Verwenden von Rails Form Helpers mit serialisierten benutzerdefinierten Klassen
class Profile < ActiveRecord::Base
serialize :wp_options
end
Dies ist meine eigene Klasse:
class WP_Options
attr_accessor :wp_name, :wp_desc, :wp_limit
end
In meiner Form:
<%= form_for(@profile, :remote => true) do |f| %>
...
<%= f.fields_for :wp_options do |wp_options| %>
<%= wp_options.text_field :wp_name %>
<% end %>
...
In meinem Controller:
@profile = Profile.new(:wp_options => WP_Options.new)
In meiner DB Spalte 'wp_options':
--- !map:ActiveSupport::HashWithIndifferentAccess
wp_name: Test
Jeder Rat würde wirklich geschätzt werden.
Ich brauchte mein Äquivalent von wp_options, um als Hash zu bleiben, damit ich über seine Einträge iterieren konnte. Also habe ich keine Änderungen am Modell vorgenommen und das 'OpenStruct.new' in das Formular wie folgt eingefügt: <% = f.fields_for: wp_options, OpenStruct.new (@ profile.wp_options) do | wp_options | %> Vielleicht hat es die Ansicht in die Modellimplementierung spähen, aber alles, was es weiß, ist, dass wp_options ein Hash ist, anstelle eines Objekts mit attr Methoden. – Turadg