4

我想has_many在我的 ActiveRecord 模型中输入我自己的关系条件。我希望我的条件覆盖默认条件。

Class User < ActiveRecord::Base

  has_many :notifs, :conditions => 
   proc { "(notifs.user_id = #{self.id} OR notifs.user_id = 0)" }

它会生成:

Notif Load (0.2ms) SELECT notifs.* FROM notifsWHERE notifsuser_id= 1 AND ((notifs.user_id = 1 或 notifs.user_id = 0))

我不想要活动记录的默认条件(第一个WHERE notifs.user_id = 1外部括号)。我只想要我自己的。我该如何指定?

4

2 回答 2

3

对于 rails 4.1+,您可以在关联范围内使用unscope 。

class Post
  belongs_to :user
end

class User
  has_many :posts, -> { unscope(:where).where(title: "hello") }
end

User.first.posts
# => SELECT "posts".* FROM "posts" WHERE "posts"."title" = $1  [["title", "hello"]]
于 2017-01-20T10:14:01.307 回答
-1

:conditions:finder_sql这样替换:

has_many :notifs, 
  :finder_sql => proc { "(notifs.user_id = #{self.id} OR notifs.user_id = 0)" }

文档中的更多详细信息:http: //apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_many

于 2013-05-27T12:51:38.570 回答