0

有人可以帮我找出如何覆盖default_scope.

在我看来,我必须显示所有matches,不仅{ where("match_date >= now()") }需要显示所有匹配项。我有理由使用 default_scope。我是 Rails 的新手。我尝试使用 unscoped,但它没有帮助,或者我没有正确使用它。有什么建议么?谢谢!

class Reservation < ActiveRecord::Base
  belongs_to :bar_match
end

class BarMatch < ActiveRecord::Base
  belongs_to :bar
  belongs_to :match
  has_many :reservations
end

class Match < ActiveRecord::Base
  has_many :bars, through: :bar_matches
  has_many :bar_matches, dependent: :destroy
  default_scope { where("match_date >= now()") }
end

控制器

 @reservations = Reservation.where(user_id: current_user.id)

看法

- @reservations.each do |reservation|
  = reservation.bar_match.match
4

2 回答 2

2

在您的 Gemfle 中添加此宝石

gem 'unscoped_associations'

然后

https://github.com/markets/unscoped_associations

或者您可以:

class BarMatch < ActiveRecord::Base
  def match
    Match.unscoped { super }
  end
end
于 2016-09-01T06:31:00.240 回答
1

你可以使用unscoped方法

Match.all          #=> SELECT * FROM matches WHERE match_date >= now()
Match.unscoped.all #=> SELECT * FROM matches

编辑:

尝试添加一个新范围并使用它

class BarMatch < ActiveRecord::Base
  #...
  belongs_to  :unscoped_match, -> { unscoped }, foreign_key: :match_id, class_name: "Match"
end

在视图中使用它

reservation.bar_match.unscoped_match
于 2016-09-01T05:01:59.630 回答