型号:
class User < ActiveRecord::Base
has_many :requests, class_name: 'Story', foreign_key: 'requester_id'
has_many :ownerships, class_name: 'Story', foreign_key: 'owner_id'
def stories
requests | ownerships
end
end
在这种情况下,方法stories
将根据需要返回uniq对象的数组。但我需要使用类似User.first.stories.where("title = 'foo'")
的东西来返回错误,因为它是一个数组,而不是关系。
那么我可以通过允许与Arel一起使用的关系来获得相同的结果呢?
PS:我在Rails 3.1.rc6
答案 0 :(得分:1)
class User < ActiveRecord::Base
def stories
Story.where "(owner_id = :id) OR (requester_id = :id)", :id => id
end
end
或者如果你使用squeel
,这可以写得更好def stories
Story.where { (owner_id == my{id}) | (requester_id == my{id}) }
end
答案 1 :(得分:0)
只有范围才会返回关系。将方法转换为LOJ范围应该有助于我猜测。
scope :stories, select('stories.*').joins('LEFT OUTER JOIN stories ON
users.id = stories.requester_id LEFT OUTER JOIN stories ON users.id = stories.owner_id')