加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 渴望加载嵌套关联和范围

发布时间:2020-12-17 03:00:31 所属栏目:百科 来源:网络整理
导读:我是初学者,很难解释我的问题: 我的模特: class Skill has_many :categories has_many :positions,:through = :categoriesendclass Category belongs_to :skill has_many :positions endclass Position belongs_to :category has_one :skill,:through = :c
我是初学者,很难解释我的问题:

我的模特:

class Skill  
  has_many :categories
  has_many :positions,:through => :categories
end

class Category
  belongs_to :skill
  has_many :positions  
end

class Position
  belongs_to :category
  has_one :skill,:through => :category    
end

我可以成功地加载所有内容,如下所示:

@skills = Skill.includes(:positions)

但有时我想在职位上应用范围:

class Position
...
  scope :active,where(:hidden => false)
end

我希望我能做到:

@skills = Skill.includes(:positions.active)

相反,我在视图中应用范围,但是急切加载不再起作用:

<%= skill.positions.acitve ... %>

是否可以同时拥有热切的装载和范围?

解决方法

您可以使用其他关联:

class Skill  
  has_many :categories
  has_many :positions,:through => :categories
  has_many :active_positions,:through => :categories
end

class Category
  belongs_to :skill
  has_many :positions  
  has_many :active_positions,:class_name => "Position",:conditions => {:hidden => false}
end

class Position
  belongs_to :category
  has_one :skill,:through => :category    
end

然后

@skills = Skill.includes(:active_positions)

但是你会得到两个联想.如果您曾使用技能.位置,则将从数据库加载所有技能的位置.您应该只使用skill.active_positions.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读