在 Rails 中编写“(x AND y)OR(a AND b)”查询的最佳方法是什么?
我刚刚编写了以下消息方法来返回两个用户之间的消息。选择是在两个用户之间获取消息,即给我消息从我给他们和他们给我。
它有效,但看起来很可怕。有没有更简单/更好的写法?
class Conversation
def initialize(me, them)
@me = me
@them = them
end
def messages
t = Message.arel_table
results = Message.where(
(t[:sender_id].eq(@me.id).and(t[:recipient_id].eq(@them.id))).or(
t[:sender_id].eq(@them.id).and(t[:recipient_id].eq(@me.id)))
)
end
end
注意感谢吉米,我最终得到了:
class Conversation
def initialize(me, them)
@me = me
@them = them
end
def messages
me_to_them = "sender_id = :my_id AND recipient_id = :their_id"
them_to_me = "sender_id = :their_id AND recipient_id = :my_id"
Message.where(
"#{me_to_them} OR #{them_to_me}",
{:my_id => @me.id, :their_id => @them.id}
)
end
end