Rails - 结合多个has_many通过

时间:2012-08-26 05:57:12

标签: ruby-on-rails activerecord has-many-through arel

我刚刚开始使用Rails,遇到了一个我无法解决的问题:

User.rb:

has_many :bid_listings, through: :bids, source: :listing, uniq: true          
has_many :offer_listings, through: :offers, source: :listing, uniq: true

这两个返回列表,并使用Listing模型中的方法/范围单独工作。但是,当我尝试组合这些时,我得到一个数组,我无法应用上市模型的方法和范围。

我尝试了多种方法,但卡住了。请帮忙。

P.S。用户有多个出价,用户有多个优惠,出价属于上市,优惠属于上市

2 个答案:

答案 0 :(得分:2)

您在Array对象上调用实例方法,而不是在ActiveRecord对象上调用。因此,Array类型的对象不知道搜索方法是什么。试试这个:

修改

user = User.first
listings = Listing.joins(:bids).joins(:offers).where(:bids => {:user_id => user.id}, :offers => {:user_id => user.id})
listings.search('a')

答案 1 :(得分:0)

我遇到了类似的问题,我提出的最佳解决方案是:

def buying_listings
  Listing.find_by_sql(bid_listings.union(offer_listings).to_sql)
end

这种方式仍然允许您继续使用作用域,但效率较低,因为它会执行额外的查询。