Rails 4 - has_and_belongs_to_many关联

时间:2016-06-27 02:33:21

标签: ruby-on-rails-4 has-and-belongs-to-many

我在用户和项目之间创建了has_and_belongs_to_many关联,以便用户能够加入项目。但是,关联表存在,我不确定如何创建关联。

View

Schema

2 个答案:

答案 0 :(得分:1)

我绝对必须建议您使用has_and_belongs_to_many,因为您无法进行回调,验证等。

使用真实的连接模型并使用has_many, through非常好。

class User
  has_many :project_users, dependent: :destroy
  has_many :projects, through: :project_users
end

class Project
  has_many :project_users, dependent: :destroy
  has_many :users, through: :project_users
end

class ProjectUser
  belongs_to :project, required: true
  belongs_to :user, required: true

  validates :project, uniqueness: { scope: :user }
end

这非常有效,您可以这样做:

User.update(project_ids: [1,5,6,7])

除非任何验证失败,否则它会将用户加入这些项目。

我开始用这些表到处都是一个大项目,几个月后我们开始遇到重复问题,记录状态不佳,这是一个热点。使用真正的连接模型非常值得。

答案 1 :(得分:0)

由于您隐藏了项目ID,因此您可以在JOIN(post)操作

中执行此操作
def join
  @project = Project.find(params[:project][:id])
  current_user.projects << @project
end

所以,如果您有@project的实例和用户的实例 - 在我的示例中它是current_user(例如,如果您使用设计),那么您只需使用运算符&lt;&lt;

分配它们

以下是参考资料:

http://guides.rubyonrails.org/association_basics.html#has-many-association-reference

希望有所帮助