Ожидается ассоциация Rails has_one Модель получила String

Имея следующие ассоциации между 3 моделями:

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

а также

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

И использование simple_form и cocoon для обработки вложенных моделей на модели верхнего уровня (Workout) У меня проблемы с созданием формы для sets а также steps - более кратко, когда ассоциируете workout_set с intro_video (и внесение в белый список параметров) У меня следующая ошибка:

Ожидается видео (#70285207226600), есть строка (#70285080848240)

params Объект после отправки выглядит так:

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

Заранее спасибо.

1 ответ

Решение

Ваши параметры передают строку ("70") intro_video= но средства доступа к ассоциациям, подобные этому, ожидают, что вы передадите фактический экземпляр связанного класса (в данном случае Video).

Вы должны вместо этого назначать intro_video_id, Метод доступа преобразует строку в целое число для вас.

Другие вопросы по тегам