我们的 Rails 3 应用程序有模型Person
和Message
. 消息可以特定于某个人(当person_id
设置了消息列时),也可以是“全局的”(当person_id
列为 NULL 时)。
我们希望使用以下选项has_many
建立一个简单的关系::conditions
class Person < ActiveRecord::Base
has_many :messages,
:conditions => proc { ['(messages.person_id IS NULL) OR ' +
'(messages.person_id = ?)'], self.id }
# ...
end
但似乎has_many
在强制外键约束与 Person 对象的 id 相等(例如“ FROM messages WHERE person_id=123 AND (person_id IS NULL OR person_id=123)
”)之后,类方法将“条件”选项编码为逻辑“AND”子句。似乎没有办法允许具有空外键的关联对象属于此类关联。
Rails 3 / ActiveRecord 是否提供了一种方法来做到这一点,还是我必须破解我自己的类似关联的方法?