访问Active ::记录来自其他关系的关系

时间:2015-08-05 18:38:38

标签: ruby-on-rails activerecord

在rails 4中,有一个类似的模型:

class User < ActiveRecord::Base
  has_many :groups                                                                                                       
  has_many :contents, through: :groups                                                                                                       
  has_many :content_masks
  has_many(
    :hidden_contents,
    through: :content_masks,
    source: :content,
    class_name: "Content"
  )
  has_many(
    :visible_contents,
    ->{ where("contents.id NOT IN (#{hidden_contents.select('contents.id').to_sql})") },
    through: :groups,
    class_name: "Content"
  )
end

但是,我无法从hidden_contents关系访问visible_contents关系。这可能吗?

似乎在特定实例上调用了关系,我应该能够以某种方式访问​​它,对吧?

1 个答案:

答案 0 :(得分:0)

需要查看一些示例代码,但假设您尝试执行类似User.visible_contents.hidden_contents的操作,则会出现某种错误。这是因为visible_contents返回AR关系,它不包含任何模型定义的关系(所以没有,在最严格的意义上回答你的问题,你不能这样做)。

但是,您可以使用以下内容:User.visibile_contents.first.hidden_contentsUser.visible_contents.map(&:hidden_contents)。如果不确切知道你想要做什么,很难准确回答这个问题。