2013-05-05 145 views
0

我有模型項目和模型用戶。我有這些中的belongs_and_has_many。但是現在我需要告訴Rails:這個具體的用戶屬於這個具體的項目。我如何在Project控制器中執行此操作,以及如何從項目視圖中調用此方法?非常感謝你。在Rails中創建關聯

項目的* show.html.erb

*我要給:

<select id="user_select" name="user_select" class="input-large"> 
    <% @users.each do |user| %> 
    <option><%= user.username %></options> 
    <% end %> 
</select> 
<!-- button to addfriend method here --> 

,我需要在這裏與選擇參數與此用戶調用方法「addfriend」到相關的項目: -/

方法addfiend在項目負責人:

def addfriend 
     @project = Project.find(params[:id]) 
     @project.users << User.find(params[:user]) 
     respond_to do |format| 
     format.html { redirect_to project, :notice => 'Added.' } 
     end 
end 

回答

0

如果模型中的促JECT,你有has_and_belongs_to_many :users,你的項目對象具有implicit collection,用戶可以添加喜歡的任何其他集合,例如:

project.users << User.find(:first, :conditions => "name = 'foo'") 
+0

「<<」與「=」相同嗎?如果有什麼寫得不好project.users = User.find(PARAMS [:用戶] – medy75 2013-05-05 19:05:42

+2

不,它不是''<<追加到一個數組,'='替換它 – hd1 2013-05-05 19:08:13

+0

所以我可以使項目負責人:。 ' def methodXX project = project.find(params [:id]) project.users << User.find(params [:user]) respond_to do | format | format.html {redirect_to project,:notice =>'補充道:」} end' 而在設置這個方法路徑路由。 權? – medy75 2013-05-05 19:28:55

0

這看起來是這樣的,在你的控制器動作:

@project = Project.create(:user_id => user_id) 

而user_id是你的外鍵(你可能想從你的視圖中傳遞的東西)。

該代碼將被寫入一些控制器動作,你必須定義一個URL連接到這個動作的路線。

請注意,一旦您調用運行此代碼的操作,您就可以從您的視圖中訪問@project。

你可以閱讀關於路線here。 你可以閱讀關於軌道here mvc。 你可以在這裏閱讀關於關聯: http://guides.rubyonrails.org/association_basics.html

+0

會Project.create創建新的項目或不是?我不想創建新的,我只是想使項目與用戶之間的唯一關聯。 – medy75 2013-05-05 19:03:16

+0

項目= Project.find(PARAMS [:ID]) PROJ ect.users << User.find(PARAMS [:用戶]) – 2013-05-05 19:46:46