如果你想保存当前登录的用户,你可以编辑你的控制器,所以,在保存艺术家之后,你可以保存 UserArtist,例如这样
def create
@artist = Artist.new(params[:artist])
if @artist.save
@user_artist = UserArtist.new(:artist_id => @artist.id, :user_id => current_user.id)
if @user_artist.save
#code...
else
#errors...
end
else
#errors...
end
end
(有一种我从未尝试过的更简单的方法;我会搜索并向您展示这种方式,但如果有人知道,请告诉我们)
另外,我没有告诉你创建回调,因为在模型中你不能访问会话变量(我只记得它)
将来,当您想在一个表单上添加更多的 UserArtist 时,请查看http://railscasts.com/episodes/196-nested-model-form-part-1和http://railscasts.com/剧集/197 嵌套模型形式第 2 部分
更新
这是我之前告诉过你的方式(它将保存两条记录):
@artist = Artist.new(params[:artist])
@artist.user_artists.new(:user_id => current_user.id)
if @artist.save
#code
else
#errors
end
另外,我发现了这个有趣的条目:仅当您成功保存父对象时才将更改保存到 has_many 关联?