答案 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
希望有所帮助