Rails有很多复杂的查询

时间:2013-01-15 10:49:36

标签: sql ruby-on-rails postgresql

我不太清楚怎么说这个,但我会试一试。

基本上我有两个模型:消息和事件。

消息belongs_to事件和事件has_many消息。

当我打电话时:

Event.first.messages

它产生这个输出:

SELECT "messages".* FROM "messages" WHERE "messages"."event_id" = 1

我希望能够保持两者之间的关联,但是在has_many等式中添加另一列,以便生成的SQL类似于:

SELECT "messages".* FROM "messages" WHERE "messages"."event_id" = 1 OR "messages"."type_id" = 4

Message和Event表都包含type_id列。

这可能吗?

3 个答案:

答案 0 :(得分:1)

您无法进行纯ActiveRecord OR查询

解决此问题的其他方法

使用SQL字符串作为参数:

Message.where("event_id = ? or type_id = ?", Event.first.id, 4)

制作2个查询,然后添加它们:

event_messages = Event.first.messages
type_messages = Message.where(:type_id => 4)
all_messages = event_messages + type_messages

原始SQL:

How to execute a raw update sql with dynamic binding in rails

答案 1 :(得分:0)

是的,可以通过使用

Event.first.messages.where(:type_id => 4)

试试吧

答案 2 :(得分:0)

试试这个

Event.first.find(:all, :conditions => ["where type_id = ? or event_id = ?", 4, 1])