2016-04-12 27 views
0

folgende Zuordnungen zwischen 3 Modelle zu haben:Rails has_one Verband erwartet Modell bekam String

workout.rb

class Workout < ActiveRecord::Base 
    has_and_belongs_to_many :workout_sets, :join_table => :workout_sessions 
    belongs_to :warmup, :class_name => :WorkoutStep, :foreign_key => "workout_step_id" 
    accepts_nested_attributes_for :workout_sets, allow_destroy: true 
    accepts_nested_attributes_for :warmup, allow_destroy: true 
end 

workout_set.rb

class WorkoutSet < ActiveRecord::Base 
    has_and_belongs_to_many :workout_steps, :join_table => :sets_steps, dependent: :destroy 
    has_and_belongs_to_many :workouts, :join_table => :workout_sessions 
    accepts_nested_attributes_for :workout_steps, allow_destroy: true 

    has_one :intro_video_usage, class_name: 'VideoUsage::Intro', as: :parent, dependent: :destroy 
    has_one :intro_video, through: :intro_video_usage, source: :video 

    accepts_nested_attributes_for :intro_video 

    has_one :get_ready_video_usage, class_name: 'VideoUsage::GetReady', as: :parent, dependent: :destroy 
    has_one :get_ready_video, through: :get_ready_video_usage, source: :video 

    has_one :congrats_video_usage, class_name: 'VideoUsage::Congratulations', as: :parent, dependent: :destroy 
    has_one :congrats_video, through: :congrats_video_usage, source: :video 
end 

und

workout_step.rb

class WorkoutStep < ActiveRecord::Base 
    has_and_belongs_to_many :workout_sets, :join_table => :sets_steps 
    has_many :main_video_usage, class_name: 'VideoUsage::Main', as: :parent 
    has_many :main_videos, through: :main_video_usage, source: :video 
    accepts_nested_attributes_for :main_videos 
end 

Und mit simple_form und cocoon verschachtelte Modelle Schöpfung auf der obersten Ebene Modell zu handhaben (Workout) ich Probleme habe das Formular für sets und steps Gebäude - prägnanter, wenn ein workout_set Assoziieren mit intro_video (und Whitelisting die params) ich folgende Fehlermeldung habe:

Video(#70285207226600) expected, got String(#70285080848240)

Das params Objekt nach Aussehen Senden wie folgt:

"workout"=>{"title"=>"", 
"workout_sets_attributes"=>{"0"=>{"_destroy"=>"false", 
"intro_video"=>"70", 
"title"=>""}}}, 
"image"=>"", 
"sound_logo"=>"", 
"intro_video"=>"", 
"commit"=>"Create workout"} 

Vielen Dank im Voraus.

+1

Weiß nicht, was Sie beabsichtigten, aber sieht aus wie Ihr Code versucht und intro_video auf 70 setzen - das ist die Ursache für Ihren Fehler –

+0

Ich versuche nur ein Video aus einer Auswahl auszuwählen und das 'intro_video 'zuzuordnen Attribut zum 'workout_set' Objekt – alexunger

+0

Also 70 ist die ID des Videos? –

Antwort

0

Ihre Parameter übergeben eine Zeichenfolge ("70") an intro_video=, aber Assoziationsaccessoren wie diese erwarten, dass Sie eine tatsächliche Instanz der zugeordneten Klasse übergeben (in diesem Fall Video).

Sie sollten stattdessen intro_video_id zuweisen. Der Accessor konvertiert die Zeichenfolge in eine Ganzzahl für Sie.

+0

Sie schlagen vor zu ändern der Name der Assoziation zu 'intro_video_id'? Nicht ganz verstehen – alexunger

+0

Nein - nur die Formulareingabe muss geändert werden –