我有一个项目,用户可以拥有一个项目,并作为一个团队成为项目的一部分。
我的模特就是这样:
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
提前致谢。
答案 0 :(得分:1)
如果我理解你的问题,你需要在会话中存储当前签名的用户ID,或者使用一些身份验证宝石(如设计)来为你做。
Devise提供了辅助方法current_user
,它返回User模型的实例。所以你可以这样做:
def create
@project= current_user.projects.build(params[:project])
...
end
<强>更新强> 如果您通过表单传递user_id,则允许任何人使用其他用户的ID创建项目。创建属于当前用户的内容的操作应该限制在服务器端的当前用户