Rails 3 - 模型关联问题

时间:2011-05-16 21:06:36

标签: ruby-on-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 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你需要在会​​话中存储当前签名的用户ID,或者使用一些身份验证宝石(如设计)来为你做。

Devise提供了辅助方法current_user,它返回User模型的实例。所以你可以这样做:

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

<强>更新 如果您通过表单传递user_id,则允许任何人使用其他用户的ID创建项目。创建属于当前用户的内容的操作应该限制在服务器端的当前用户