如何在Rails 5中为has_many关系创建作用域?

时间:2019-02-15 05:13:31

标签: ruby-on-rails activerecord ruby-on-rails-5

我有一个Group模型,其中有许多Events,并且我试图通过Group.public_events

来查找具有公共事件的组。

这是我的群组:

class Group < ApplicationRecord
  has_many :events, dependent: :destroy
end

这是我的活动:

class Event < ApplicationRecord
  belongs_to :group
end

我想创建一个scope :public_events来找到Event上的.where(private: false),但这应该在Group或Event上进行吗?

3 个答案:

答案 0 :(得分:5)

将像这样参加活动。

class Event < ApplicationRecord
  belongs_to :group
  scope :public_events, -> { where(private: false) }
end

答案 1 :(得分:3)

您可以放入Event.rb

class Event < ApplicationRecord
  belongs_to :group
  scope :public_events, lambda { where('private = ?',false)}
end

您可以调用它

@public_events = Group.first.events.public_events

答案 2 :(得分:2)

您可以使用此功能。

scope :public_events, ->(parameter_if_any) {
  where({ private: parameter_if_any||false } )
}