これは全体的に間違っているかもしれませんが、誰かがチャープして助けてくれるかもしれません。ビルドhas_many:through新しいオブジェクト
問題:
私はこれがうまくいくよう、保存されていないオブジェクト上の関係を構築することができるようにしたい:
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
このメソッドはvid私は
v.actors.map(&:name)
=> ["Jonny Depp", "Clint Eastwood", "Rick Moranis"]
Unfortunatey、これらの戦術を期待して何
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
をeo.rbでもない俳優や関連付けを作成します。
私もようactors_list=
方法を変更しようとした
has_many :actor_on_videos
has_many :actors, :through => :actor_on_videos
accepts_nested_attributes_for :actors
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 << Actor.create!(:name => actorname.strip)
end
end
end
をそして、それは俳優を作成し、ビデオの保存に失敗した場合は、アクタを作成しないでください。
このように間違っていますか?それとも、私は何かを見逃してしまった?
感謝を!すばらしく動作します。私はそれを動作させるために変更を加えなければならなかったいくつかの編集提案を投げた –
@KyleMacey、あなたがしなければならない編集は何ですか? –
あなたの担当者と一緒にそれらを見ることができると思いました。私はまだ自分自身ではない。ここに行く>> http://pastebin.com/2LaXGe4G –