2011-08-29 54 views
0

我在兩個模型列表和用戶之間有多對多的關係。Rails 3 - 控制器以多對多的關係創建動作

當用戶創建一個列表時,它應該自動將它添加到User.lists數組中。現在,我有這個工作,但它聞起來有點:

def create 
    @list = current_user.lists.new(params[:list]) 
    current_user.lists << @list 

有沒有辦法讓這下降到一條線?沒有將@list傳入集合< <,但是當我構建新列表時,會自動將它列入集合嗎?

感謝

回答

2

你只需要做到這一點:

@list = current_user.lists.create(params[:list]) 
+0

真棒減少您的代碼行,是有不同的方式,我應該做驗證一個多到許多這樣的嗎?我只是得到錯誤,而不是渲染給用戶。可能值得另一個問題。 – Kombo

+0

此語法也適用:'@list = List.new(params [:list]); current_user.lists << @ list',但我不確定它會幫助你! –

0

我建議稍微不同的方法,以幫助滿足您的驗證。

def create 
    @list = current_user.lists.new(params[:list]) 
    respond_to do |format| 
    if (current_user.lists << @list rescue false) 
     format.html {...} 
    else 
     format.html {...} 
    end 
    end 
end 

最大的區別是,

current_user.lists << @list 

,如果它成功保存返回列表和異常,如果失敗的話,你拯救和返回(如果結果不是假的或零解釋爲真)假。這取代了傳統的

@list.save 

它返回true的真,如果沒有,則返回nil。正確設置respond_to塊內if語句的邏輯。

它由1