2017-03-14 5 views
0

Ich habe Mühe zu verstehen, was passiert, wenn ich mein großformatiges Formular speichere - keiner der Hstore-Parameter wird in der Datenbank gespeichert. Kann jemand darauf hinweisen, was ich für den offensichtlichen Fehler halte? (Ich habe getrimmt schnell viel von der Ausgabe, die es möglichst kurz zu halten.Rails 4.2.5, simple_form, hstore, verschachtelte Formulare - Hstest Hash nicht persistent beim Speichern

Es gibt keine Konsolenausgabe, und es ist nicht beschweren über unpermitted params oder nichts. equipment Feld auf das discipline Modell ist die hstore Spalte.

Aufgrund meiner starken params Einstellungen:

params.require(:profile).permit(
    :id, 
    :user_id, 
    :gender, 
    :dob, 
    ..snip.. 
    disciplines_attributes: [ 
    :id, 
    :profile_id, 
    :discipline_type, 
    :distance_in_meters_per_week, 
    ..snip.. 
    :equipment => [ 
     :time_trial_bike, 
     :road_bike, 
     :turbo_trainer, 
     :watt_bike 
    ] 
    ] 

Mein params:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"XX", "profile"=> 
{"gender"=>"male", "dob(1i)"=>"1927", "dob(2i)"=>"3", "dob(3i)"=>"14", 
"disciplines_attributes"=>{"0"=> 
{"discipline_type"=>"swimming", "distance_in_meters_per_week"=>"", 
"equipment"=> 
    { 
     "pull_buoy"=>"true", 
     "paddles"=>"false", 
     "wetsuit"=>"true", 
     "fins"=>"false", 
     "tempo_trainer"=>"false" 
    }}}, 
"commit"=>"Create Profile"} 

Dann ist mein inspizieren d resultierend profile_params von der Steuerung:

{"gender"=>"male", "dob(1i)"=>"1927", "dob(2i)"=>"3", "dob(3i)"=>"14", "height_in_meters"=>"", 
"disciplines_attributes"=>{"0"=>{"discipline_type"=>"swimming", "distance_in_meters_per_week"=>"", 
"equipment"=>{ 
    "pull_buoy"=>"true", 
    "paddles"=>"false", 
    "wetsuit"=>"true", 
    "fins"=>"false", 
    "tempo_trainer"=>"false"}} 
} 

Kann mir jemand helfen zu verstehen, warum das Gerät Hash nicht in die Datenbank übernommen wird?

Discipline id: 148, profile_id: 50, discipline_type: "running", distance_in_meters_per_week: "", sessions_per_week: nil, time_per_session_in_minutes: nil, created_at: "2017-03-14 12:02:15", updated_at: "2017-03-14 12:02:15", equipment: nil>] 

Antwort

0

Was ist es über Ihre eigene Frage zu schreiben, dass immer dann führt Sie schließlich, dass das Verständnis, nur vielleicht, Sie an anderer Stelle vermasselt?

Wie Überladen der Disciplines::initialize Methode, um die Ausrüstung Hstore zu "säen", wenn es ein neuer Rekord ist. Aber es in jedem Fall tun, nicht nur neue Datensätze.

Also in Antwort auf meine eigene Frage. Die oben funktioniert, und wenn ich die Mühe gemacht hatte die DB direkt zu überprüfen, anstatt auf der Konsole zu verlassen, ich habe vielleicht erkannt, dass:

after_initialize :setup_equipment 

def initialize(search, options = {}) 
    self.options = options 
    super 
end 

private 

def setup_equipment 
    self.equipment = self.options 
end 

mein Problem entlang war alles. :(

Verwandte Themen