0

我不太确定如何措辞,但我会试一试。

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

消息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 列。

这可能吗?

4

3 回答 3

1

您不能进行纯 ActiveRecord OR 查询

解决此问题的其他方法

使用 SQL 字符串作为 where 参数:

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:

如何在rails中使用动态绑定执行原始更新sql

于 2013-01-15T11:16:55.103 回答
0

是的,它可能通过使用

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

尝试一下

于 2013-01-15T11:01:18.840 回答
0

试试这个

Event.first.find(:all, :conditions => ["where type_id = ? or event_id = ?", 4, 1])
于 2013-01-15T11:09:46.217 回答