我想要的是这样的:
class Company > ActiveRecord::Base has_many :staffings has_many :users,through: :staffings,conditions: {staffings: {active: true}}end
我想通过以下方式使用Company#users:
>公司#用户应该是正常的关联,以便它与表格一起使用,并且不会破坏现有合同.
>将用户添加到公司时,会创建一个具有active:true的新Staffing.
>从公司中删除用户时,现有人员配置将更新为活动:false(当前只是被删除).
>将以前删除的用户添加到公司时(以便Staffing #active == false),Staffing将更新为active:true.
我考虑过覆盖公司#useuse =方法,但它确实不够好,因为还有其他更新关联的方法.
所以问题是:如何在公司#用户协会上实现解释的行为?
谢谢.
解决方法 has_many:通过关联实际上只是语法糖.当你需要做繁重的工作时,我会建议拆分逻辑并提供适当的方法和范围.了解如何覆盖 callbacks对于此类事情也很有用.这将使您开始在用户上进行软删除并在用户之后创建人员配置
class Company < ActiveRecord::Base has_many :staffings has_many :users,conditions: ['staffings.active = ?',true]endclass Staffing < ActiveRecord::Base belongs_to :company has_one :userendclass User < ActiveRecord::Base belongs_to :staffing # after callback fires,create a staffing after_create {|user| user.create_staffing(active: true)} # overrIDe the destroy method since you # don't actually want to destroy the User def destroy run_callbacks :delete do self.staffing.active = false if self.staffing end endend总结
以上是内存溢出为你收集整理的ruby-on-rails – 通过关联对has_many进行软删除全部内容,希望文章能够帮你解决ruby-on-rails – 通过关联对has_many进行软删除所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)