2016-03-30 39 views
1

İşletmenin açık olup olmadığını belirlemek için bir işletmenin gün ve saatlerini kontrol etmeye çalışıyorum. SupplierTradingHour.open ama :open kapsamı iki bağımsız değişken içeren bir lambda ifadesidir |day, time|:İşletmenin açık olup olmadığını kontrol edin

benim

%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 Modeli kısmi tedarikçisi

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

Bir soru sormayı unutmuşsunuzdur. Ne oluyor? Beklendiği gibi davranmıyor mu? – toddmetheny

+0

ArgumentError at/alışveriş/tedarikçiler yanlış argüman sayısı (0 için 2) –

cevap

1

Sen kanıtlar olmaksızın open kapsamını aradığınız Bu kodu var Kodunuzun başarısız olmasının nedenlerinden biri.

Kişisel SQL mantıksal ifadesi de doğru değil: open_time <= ? AND close_time > ? bir DIY uygulanması için durumunda

, (operatörler senin tersi olduğunu unutmayın) Bunu yaparken öneririz olur (üçüncü taraf taşlar kullanmadan):

tedarikçi modelinde ardından
#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 

: görünümünüzü çağrısından sonra

#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 öğesi "SELECT COUNT" (")" trading_hours "WHERE" trading_hours "konumuna ayarlandığında doğru sql döndürmez "merchant_id" = 1 TL VE (hafta içi = 0 VE open_time <= '2016-05-29 03: 01: 59.377064' VE close_time> '2016-05-29 03: 01: 59.377064') [["merchant_id", nil ]] ' –

0

bir ayar kapsamında iyi ama muhtemelen sadece böyle bir şeyle benim @suppliers tanımlarsınız: Farklı koşullarda bunun her iki tarafını gerekiyorsa

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

Diğer bir seçenek, bir örneğini yazmak olacaktır alternatif bir uygulama olarak yöntem is_open?

+0

bunu yapmanın bir metodu ekleyerek, tüm işin kapalı olduğunu, şu anki zamana ihtiyacım var mı? –

İlgili konular