ruby-on-rails – Rails“has_many”与NULL外键关联
发布时间:2020-12-17 02:01:50 所属栏目:百科 来源:网络整理
导读:我们的Rails 3应用程序具有模型Person和Message.消息可以特定于Person(设置消息person_id列时),也可以是“全局”(当person_id列为NULL时). 我们希望使用 :conditions option这样一个简单的has_many关系: class Person ActiveRecord::Base has_many :message
我们的Rails 3应用程序具有模型Person和Message.消息可以特定于Person(设置消息person_id列时),也可以是“全局”(当person_id列为NULL时).
我们希望使用 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强制执行相等的外键约束之后将“conditions”选项编码为逻辑“AND”子句(例如“FROM messages WHERE person_id = 123 AND(person_id IS NULL OR person_id) = 123)“).似乎无法允许具有空外键的关联对象属于此类关联. Rails 3 / ActiveRecord是否提供了这样做的方法,还是我必须破解自己类似关联的方法? 解决方法
您不能在ActiveRecord关联中使用条件.您可以在没有条件的情况下拥有关联,然后添加一个方法以包含所需的全局消息.这样,在构建关联记录时,您仍然可以利用关联.
# person.rb has_many :messages def all_messages Message.where('messages.person_id=? OR messages.person_id IS NULL',id) end 这是我的Squeel gem的标准插件,如果您不想在代码中使用SQL,那么这对于更高级的查询非常方便.看看这个. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |