2011-05-16 81 views
0

我有一個項目,用戶可以擁有一個項目並將其作爲一個團隊的一部分。Rails 3 - 模型關聯問題

我的模式是這樣的:

class User 
has_many :projects, :foreign_key => "owner_id" 
has_many :project_memberships, :foreign_key => "member_id" 
has_many :shared_projects, :class_name => "Project", :through => :project_memberships, :foreign_key => "member_id" 
end 

class Project 
belongs_to :owner, :class_name => "User" 
has_many :project_memberships 
has_many :members, :class_name => "User", :through => "project_memberships", :foreign_key => "member_id" 
end 

我的問題是:如何創建/刪除等新的項目,所以一個用戶可以擁有它,因爲我沒有使用嵌套的資源呢?

這裏是我的項目負責人:

def new 
@project = Project.new 
end 

def create 
@owner = User.find(params[:user_id]) 
@project= @owner.projects.build(params[:project]) 
    ... 
end 

在此先感謝。

回答

1

如果我正確理解你的問題,你需要在會​​話中存儲當前登錄的用戶ID或使用一些認證寶石(如設計),這將爲你做。

Devise提供了幫助方法current_user,它返回用戶模型的一個實例。所以,你可以做像這樣:

def create 
@project= current_user.projects.build(params[:project]) 
    ... 
end 

更新 如果通過形式傳遞USER_ID,您允許任何人創建與另一個用戶的ID項目。創建屬於當前用戶的操作應該限制在服務器端的當前用戶

+0

我認爲我已經完成並且沒有解決問題。我的表單以此開始:'<%= form_for([@ user,@ project])do | f | %>'。這是錯的嗎?感謝你的回答。 – Luk 2011-05-16 21:24:35

+0

實際上,我在'build'方法中遇到了一些問題,所以我最終使用'Model.create'並將current_user作爲參數傳遞給髒快速修復。 – bassneck 2011-05-16 21:35:00

+0

仍然無法正常工作... – Luk 2011-05-16 22:17:30