加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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时).

我们希望使用:conditions option这样一个简单的has_many关系:

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,那么这对于更高级的查询非常方便.看看这个.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读