2016-10-05 4 views
0

私はMerchantモデルを持っています。モデルは、勤務時間モデルのaccepts_nested_attributesを受け取ります。Rails - 販売者が開いている場合に返す方法

マーチャントモデル

class Merchant < ApplicationRecord 
    has_many :working_hours, inverse_of: :merchant, dependent: :destroy 
    accepts_nested_attributes_for :working_hours, reject_if: :all_blank, allow_destroy: true 
end 

労働時間モデル

class WorkingHour < ApplicationRecord 
    belongs_to :merchant 
end 

working_hoursテーブルがあります。

class CreateWorkingHours < ActiveRecord::Migration[5.0] 
    def change 
    create_table :working_hours do |t| 
     t.integer :day 
     t.time :open_time 
     t.time :close_time 
     t.references :merchant, foreign_key: true 
     t.timestamps 
    end 
    end 
end 

商人が日 EXにより、複数のworking_hourブロックを持つことができます。8 00:00〜12:00/15:00〜18:00

マーチャントが開いているか閉じているかを返すメソッドを作成したいと思います。どうやってやるの?

+0

にこれを追加しよう - 現在の時間を取得します - 現在の時間がレコードのオープンとクローズの時間の間に来るまでレコードをループする - もしあなたが肯定的なリターンを得なければ - ベンダーは閉鎖されている(私は全てのエントリーを配列に変換するという不吉な考えがあったベンダーがオープンしている数字は意味がありません) - 迅速な質問 - 曜日は関係ありませんか? – MageeWorld

+0

はい、曜日は整数データテーブルの日付(0〜6)です。 私はそのようなことをやろうと思っていましたが、あなたが現在の曜日と現在時刻の後に来るまで、レコードをループする前にループしました。 しかし、私はROR/ruby​​にはかなり新しいです。私はどのようにそれを行うことができるかわからない。 何か Time.current.wday == working_hour.day ようopen_time close.time – user1301037

+0

実際に - 私は、クエリのレールガイドを確認したい[ここ](のhttp:/ /guides.rubyonrails.org/active_record_querying.html)。実際には、ベンダーがその日に開いているかどうかをチェックする簡単なクエリが必要だと思っています。それらのレコードのいずれかに時間がある場合 – MageeWorld

答えて

1

更新 我々はself.一部

を失ってしまったする必要がありましたベンダーのすべての労働時間を見つけ、あなたの商人のモデル

def open? 
    self.working_hours.any? { |wh| 
     (wh.open_time.hour..wh.close_time.hour).cover?(Time.current.hour) 
    } 
end 
+0

あまりにも当日をカバーするのは間違いありませんか? – MageeWorld

+0

明示的に 'true'と' false'を返す必要はありません –

+0

Time.currentはタイムゾーンを返しませんか? (config.time_zoneが設定されています) – user1301037

関連する問題