我的模型设置如下:
class Record < ActiveRecord::Base
belongs_to :activity
has_many :codes, -> { order("codes.name") }, through: :activity
class Activity < ActiveRecord::Base
has_many :activity_code_links
has_many :codes, through: :activity_code_links
has_many :records
class ActivityCodeLink < ActiveRecord::Base
belongs_to :activity
belongs_to :code
class Code < ActiveRecord::Base
has_many :activity_code_links
has_many :activities, through: :activity_code_links
has_many :records, through: :activities
在控制器中,我有一个ActiveRecord记录关系,@records。 我希望我生成的@records只包含具有特定代码的记录。
目前,我正在使用以下解决方案;但它效率不高,并且还返回一个数组,而不是ActiveRecord关系:
@records = @records.reject { |record| (record.codes & [code]).empty? }
任何帮助将不胜感激
干杯
答案 0 :(得分:1)
@records.joins(:codes).where(codes: {id: code.id})
请注意,如果您以后不需要使用代码实体,则应使用joins
代替includes
,因为它无法实例化ActiveRecord对象,从而增加了开销
答案 1 :(得分:0)
@records = @records.includes(:codes).where(codes: {id: code.id})
其中code
是您想要过滤的代码对象。