Возможно, я все делаю неправильно, но, возможно, кто-то сможет щебетать и помогать.
Проблема
Я хочу иметь возможность построить отношения на несохраненном Объекте, чтобы это работало:
v = Video.new
v.title = "New Video"
v.actors.build(:name => "Jonny Depp")
v.save!
Чтобы добавить к этому, они будут сгенерированы с помощью специального метода, который я пытаюсь изменить для работы, который выполняет следующее:
v = Video.new
v.title = "Interesting cast..."
v.actors_list = "Jonny Depp, Clint Eastwood, Rick Moranis"
v.save
Этот метод выглядит так в video.rb
def actors_list=value
#Clear for existing videos
self.actors.clear
value.split(',').each do |actorname|
if existing = Actor.find_by_name(actorname.strip)
self.actors << existing
else
self.actors.build(:name => actorname.strip)
end
end
end
Что я ожидаю
v.actors.map(&:name)
=> ["Jonny Depp", "Clint Eastwood", "Rick Moranis"]
К сожалению, эта тактика не создает ни Актера, ни ассоциации. Ах да, вы можете спросить меня об этом:
в видео.rb
has_many :actor_on_videos
has_many :actors, :through => :actor_on_videos
accepts_nested_attributes_for :actors
Я также пытался изменить метод actors_list=
следующим образом:
def actors_list=value
#Clear for existing videos
self.actors.clear
value.split(',').each do |actorname|
if existing = Actor.find_by_name(actorname.strip)
self.actors << existing
else
self.actors << Actor.create!(:name => actorname.strip)
end
end
end
И он создает Актера, но я бы предпочел не создавать Актера, если при сбое Видео не удается сохранить.
Так я не подхожу к этому неправильно? Или я что-то упустил очевидное?