2016-03-30 8 views
1

ビジネスの日時をチェックして、オープンかどうかを判断しようとしています。ビジネスのチェックが開いているかどうか

私は私のサプライヤーにこのコードを持っている部分

%li 
    = link_to shopping_supplier_path(supplier) do 
    = content_tag :div, class: 'grid-block' do 
     = content_tag :div, supplier.image_available, :class => 'small-3 grid-content' 
     = content_tag :div, :class => 'small-9 grid-content' do 
     %h4= supplier.name.truncate(30).titlecase 
     = content_tag :div, class: 'grid-block' do 
      .small-3.grid-content 9/10 
      .small-3.grid-content $$ 
      .small-6.grid-content.text-right 
      - SupplierTradingHour.open.includes(:supplier).each do |hour| 
       = "#{hour.supplier.name} is open! It closes at #{hour.close_time}." 

TradingHourモデル

class SupplierTradingHour < ActiveRecord::Base 
    belongs_to :supplier 

    scope :open, lambda { |day, time| { :conditions => ["self.weekday = ? AND self.open_time >= ? AND self.close_time < ?", day, time, time] } } 

end 
+0

質問をするのを忘れました。何が起こっていますか?期待どおりに動作していませんか? – toddmetheny

+0

/shopping/suppliersのArgumentError 引数が間違っている(0の場合は2) –

答えて

1

あなたは、引数なしでopen範囲を呼び出している:SupplierTradingHour.openが、あなたの:open範囲は二つの引数を持つラムダ式である|day, time|あなたのコードが失敗している理由の1つです。

あなたのSQLの論理式も正しくありません:open_time <= ? AND close_time > ?(オペレーターがあなたの反対であることに注意してください)

あなたのケースでは、(サードパーティ製の宝石を使用せずに)DIYの実装のために、私はこれを行うことを示唆している:

あなたのサプライヤーのモデルで、その後
#app/models/trading_hour.rb 
class TradingHour < ActiveRecord::Base 

    belongs_to :supplier 

    scope :open_now, -> (day, time) { where("weekday = ? AND open_time <= ? AND close_time > ?", day, time, time) } 

end 

:あなたのビュー呼び出しから次に

#app/models/supplier.rb 
class Supplier < ActiveRecord::Base 

    has_many :trading_hours 

    def opening_status day, hour 
    today_trading_hours = trading_hours.open_now(day, hour) 
    if today_trading_hours.size > 0 
     "Opened until #{today_trading_hours.first.close_time}H" 
    else 
     "Closed" 
    end 
    end 
end 

#if today is day 1 
#and current hour is 12 
supplier.opening_status(1, 12) 
+0

merchant_idがnilに設定されているため、正しいsqlが返されません。SELECT COUNT(*)FROM "trading_hours" WHERE "trading_hours" "merchant_id" = $ 1 AND(平日= 0 AND open_time <= '2016-05-29 03:01:59.377064' AND close_time> '2016-05-29 03:01:59.377064 ')[["merchant_id"、nil ]] ' –

0

範囲を設定することは結構ですが、私はおそらくちょうどのようなもので、私の@suppliersを定義します

@suppliers = Supplier.where("weekday = ? AND open_time > ? AND closing_time < ?", day, time, time) 

別のオプションは、異なる状況での両面が必要な場合は、インスタンスを書くことであろう代替実装の方法としてis_open?

+0

これを行う方法を追加すると、私はすべてのビジネスが閉じている、私は現在のdatetrucする必要がありますか? –

1

、あなたは営業時間に関連する機能については、以下の宝石を使用して検討する必要があります

https://github.com/Intrepidd/working_hours

+0

私は異なるサプライヤー間で複数の時間を持っているので、これは良いことではありません –

関連する問題