我完全困惑于如何编写一个范围,该范围显示已关闭或已过期的事件 。如果一个人能告诉我,我 将不胜感激如何编写封闭或过期对象的范围 - Rails 4
模式
ActiveRecord::Schema.define(version: 20161116132520) do
create_table "events", force: :cascade do |t|
t.string "title"
t.text "description"
t.date "date"
t.string "city"
t.boolean "close"
t.integer "user_id"
end
end
我想下面的范围,但没有运气:
Event.rb file
scope :expired_or_closed_events, -> {where(['close = ?', true] || ['date < ?', Date.current])}
scope :expired_events, -> {where(['date < ?', Date.current])}
scope :closed_events, -> {where(['close = ?', true])}
问题:这是下面的问题我有。范围
events.expired_or_closed_events.count
或events.closed_events.expired_events.count
应该显示共 计数5
。难道一个好心劝我,我怎么写一个范围,多数民众赞成 显示是closed but not expired & that are closed and expired
所有事件 -
2.3.0 :002 > events.count
(0.2ms) SELECT COUNT(*) FROM "events"
=> 8
2.3.0 :003 >
2.3.0 :004 >
2.3.0 :005 > events.closed_events.count
(0.2ms) SELECT COUNT(*) FROM "events" WHERE (close = 't')
=> 1
2.3.0 :006 >
2.3.0 :007 >
2.3.0 :008 > events.expired_events.count
(0.3ms) SELECT COUNT(*) FROM "events" WHERE (date < '2016-11-19')
=> 4
2.3.0 :009 >
2.3.0 :010 >
2.3.0 :011 >
2.3.0 :012 > events.expired_or_closed_events.count
(0.2ms) SELECT COUNT(*) FROM "events" WHERE (close = 't')
=> 1
2.3.0 :013 >
2.3.0 :014 >
2.3.0 :015 >
2.3.0 :016 > events.closed_events.expired_events.count
(0.2ms) SELECT COUNT(*) FROM "events" WHERE (close = 't') AND (date < '2016-11-19')
=> 0
2.3.0 :017 >