2016-11-19 2 views
-1

Я полностью смущен тем, как писать область, отображающую события , которые либо были закрыты, либо истекли. если можно было бы посоветовать мне, я был бы очень благодаренКак написать область для закрытых или истекших объектов - 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. Может один любезно посоветовать мне, как я пишу сферу Thats дисплей все события, которые 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 > 

ответ

1

Вы можете попробовать смешанный рубин с использованием метода SQL:

scope :expired_or_closed_events, -> { where('close = ? OR date < ?', true, Date.current) } 

scope :expired_events, -> { where('date < ?', Date.current) } 
scope :closed_events, -> { where(close: true) } 
1

Вы можете попробовать, как следующее:

scope :expired_or_closed_events, -> {where("close = 't' or date < '#{Date.current}'")} 
Смежные вопросы