加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails有很多,属于一个

发布时间:2020-12-16 19:42:34 所属栏目:百科 来源:网络整理
导读:我有一个用户模型,它有许多项目和一个可以有很多用户的项目模型,但也属于单个用户(即创建此项目的用户).它必须属于用户.它还允许与其关联的用户列表,思考协作. 考虑到这一点,我的模型看起来像这样: class User ActiveRecord::Base has_many :assigned_proje
我有一个用户模型,它有许多项目和一个可以有很多用户的项目模型,但也属于单个用户(即创建此项目的用户).它必须属于用户.它还允许与其关联的用户列表,思考协作.

考虑到这一点,我的模型看起来像这样:

class User < ActiveRecord::Base
  has_many :assigned_projects
  has_many :projects,:through => :assigned_projects
end

class Project < ActiveRecord::Base
  belongs_to :user
  has_many :assigned_projects
  has_many :users,:through => :assigned_projects
end

class AssignedProject < ActiveRecord::Base
  belongs_to :user
  belongs_to :project
end

现在,当我想通过一个用户创建一个新的项目,这是我将如何做:

user = User.create(:name => 'injekt')
user.projects.create(:name => 'project one')

现在,我知道项目是通过AssignedProject连接模型提供的,这就是为什么project.user将返回nil.我正在努力解决问题是分配项目创建者的最佳方式(它不需要是用户,它可以是创建者或其他描述性的东西,只要它是User类型) .

然后,想法是创建一个方法来从用户返回projects_created,该用户将仅选择由此用户创建的项目.当user.projects当然会返回用户关联的所有项目.

假设这种关联是相当普遍的,实现我想要的最好方法是什么?任何方向都非常感激.

解决方法

在创建者关系的项目表中添加一个creator_id列,然后将关联添加到模型中:
class User < ActiveRecord::Base
  has_many :assigned_projects
  has_many :projects,:through => :assigned_projects

  has_many :created_projects,:class_name => "Project",:foreign_key => :creator_id
end

class Project < ActiveRecord::Base
  belongs_to :user
  has_many :assigned_projects
  has_many :users,:through => :assigned_projects

  belongs_to :creator,:class_name => "User",:foreign_key => :creator_id
end

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读