1

我有一個模型藝術家,現在我想創建一個模型user_artist,應該保存當前記錄的用戶和對藝術家的引用。我採用了一種新模式,因爲這個數據庫中可能會有一個以上的用戶訪問一位藝術家。 現在我有了這個模型,在用戶創建一個新的藝術家的過程中,我現在可以如何保存當前用戶。參考表格軌道

這是我目前的形式:

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

如何,我必須改變這種同時保存在數據庫user_artist用戶?

回答

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 

(還有一個更簡單的後方法來做到這一點,我從來沒有嘗試;我會搜索和顯示你的方式,但如果有人知道,請告訴我們)

此外,我沒有告訴你有關創建回調,因爲在模型中無法訪問會話變量(我只記得它)

對於未來,當你想添加一個單一的形式dinamically更UserArtist,看看這個http://railscasts.com/episodes/196-nested-model-form-part-1http://railscasts.com/episodes/197-nested-model-form-part-2

UPDATE

這是我早就跟你說過的方式(它會節省記錄):

@artist = Artist.new(params[:artist]) 
@artist.user_artists.new(:user_id => current_user.id) 
if @artist.save 
    #code 
else 
    #errors 
end 

另外,我發現這個有趣的條目:Save changes to a has_many association ONLY when you successfully save the parent object?

+0

謝謝!以及我如何獲得所有user_artists?我有這樣的代碼:User_artist.where(「artist_id =?」,params [:id])但是我如何獲得用戶模型? – ijo

+1

由於關係的原因,你可以像'@artist = Artist.find(params [:id])',然後'@user_artists = @ artist.user_artists'這樣做。你之前沒有提到'User'模型。 – pablomarti