如何在Rails中设置条件关联?

安东尼·杜

因此,我有两个关联的模型“用户”和“杂志”。它们通过订阅通过has_many:through关系关联。所以这是它的样子:

class User < ActiveRecord::Base
  has_many :subscriptions
  has_many :magazines, :through => :subscriptions
end

class Subscription < ActiveRecord::Base
  belongs_to :user
  belongs_to :magazine
end

class Magazine < ActiveRecord::Base
  has_many :subscriptions
  has_many :users, :through => :subscriptions
end    

用户具有名为的布尔属性paid我只希望用户在哪里paid == true可以订阅任何杂志。我如何建立这样的条件关联?在此先感谢您的帮助!

二手烟

对于关联,您可以在哈希选项之前传递一个lambda值。在此lambda中,您可以指定条件,顺序等。

class Magazine < ActiveRecord::Base
  has_many :subscriptions
  has_many :users, ->{ where(users: {paid: true}) }, through: :subscriptions
end 

对于用户,您可以执行以下操作:

class User < ActiveRecord::Base
  has_many :subscriptions
  has_many :magazines, through: :subscriptions

  def magazines
    self.paid ? super : Magazine.none
  end
end

虽然很整洁,但是在连接表时,上面的行为可能无法预测,例如,User.joins(:magazines)可能会忽略paid条件或崩溃。

更好的选择:

class User < ActiveRecord::Base
  has_many  :subscriptions
  has_many  :magazines,
            ->{ where("subscriptions.user_id IN (
                  SELECT id FROM users WHERE users.paid = 't')") },
            through: :subscriptions
end

where在lambda可能是由可替换的joins,如下所示:

joins(subscriptions: :user).where(users: {paid: true})

但我认为这将加入subscriptions两次-一次参加lambda,一次参加协会。我不确定。如果是这样,并且这使您感到困扰,那么:

joins("INNER JOIN users ON (users.id = subscriptions.user_id)").
where(users: {paid: true})

或者:

joins("INNER JOIN users ON (
  (users.id = subscriptions.user_id) AND (users.paid = 't')
)")

另外,我认为您将Subscription模型误贴Registration

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Rails 4.2中设置此ActiveRecord关联?

来自分类Dev

如何在Rails / ActiveRecord中设置这个Emirates_to关联?

来自分类Dev

如何设置Rails关联?

来自分类Dev

如何在Rails中批量查询关联?

来自分类Dev

如何在Rails中测试关联?

来自分类Dev

如何在Rails中的不同表上为条件创建has_many_and_belongs_to关联?

来自分类Dev

Rails:如何在ActiveRecord中设置祖父母值(关联)

来自分类Dev

如何在 ActiveRecord 中以关联表为条件进行查询

来自分类Dev

如何在Redux存储中设置与数据的关联

来自分类Dev

如何在CakePHP中设置关联表的连接

来自分类Dev

如何在Windows 7中设置高级文件关联?

来自分类Dev

Windows 10:如何在“文件关联”中设置程序路径?

来自分类Dev

如何在rails中插入has_many关联

来自分类Dev

如何在Rails中的2个表之间建立关联

来自分类Dev

如何在Rails中存储“半恒定”关联数据?

来自分类Dev

如何在Rails中过滤与分组选择的关联

来自分类Dev

Rails:如何在子模型(关联)中存储父数据

来自分类Dev

如何在 rails 5 中获取关联的多态对象?

来自分类Dev

如何在RegExp中设置OR条件?

来自分类Dev

如何在 COUNT 中设置条件

来自分类Dev

如何在 tKinter 中设置条件

来自分类Dev

如何在反应钩子中设置条件

来自分类Dev

如何在Rails中设置标签样式

来自分类Dev

如何在Rails中设置URL路由?

来自分类Dev

如何在Rails中设置标签样式

来自分类Dev

如何在Rails中设置标志值?

来自分类Dev

如何在Rails中的对象上建立子关联而不保存父关联?

来自分类Dev

如何更改Rails中的关联

来自分类Dev

如何在Rails 4中使用“或”链接条件条件?

Related 相关文章

热门标签

归档