我刚开始使用Rails,有一个我自己无法解决的问题:
用户.rb:
has_many :bid_listings, through: :bids, source: :listing, uniq: true
has_many :offer_listings, through: :offers, source: :listing, uniq: true
这两种方法都返回清单,并且单独使用清单模型中的方法/作用域可以完美地工作。然而,当我试图将它们组合在一起时,我得到了一个数组,在那里我不能应用Listing模型的方法和范围。
我试过多种方法,但都坚持了下来。请帮忙。
p.S.用户有很多出价,用户有很多报价,出价属于挂牌,报价属于挂牌
您在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')
我也遇到过类似的问题,我想出的最佳解决方案是:
def buying_listings
Listing.find_by_sql(bid_listings.union(offer_listings).to_sql)
end
这种方式应该仍然允许您继续作用域,但效率较低,因为它将执行额外的查询。