1

我有一个模型艺术家,现在我想创建一个模型 user_artist,它应该保存当前登录的用户和对艺术家的引用。我采用一个新模型,因为该数据库中可能有多个用户用于一位艺术家。现在我有了模型,在用户创建新艺术家期间如何保存当前用户。

这是我目前的表格:

<%= form_for @artist do |f| %>
  <%= f.label :name, "Name" %>
  <%= f.submit "Create" %>
<% end -%>

我必须如何更改它以同时将用户保存在数据库 user_artist 中?

4

1 回答 1

1

如果你想保存当前登录的用户,你可以编辑你的控制器,所以,在保存艺术家之后,你可以保存 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-1http://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 关联?

于 2012-12-09T18:33:06.870 回答