2017-02-23 8 views
0

私は予約システムを構築しています。ここでは、ユーザーが予約を検索することができます。 :onスコープは、特定の日時に存在する予約をフィルタリングし、reserved_table_idsという配列を作成します。選択した日/時間に予約がある場合は、@reserved_tables@open_tablesに正しい表IDが含まれています。ただし、選択した日時に予約がない場合、reserved_table_idsはヌルで、@reserved_tables@open_tablesは空です。 reserved_table_idsがnullの場合、すべてのtable_idsを@open_tablesに埋め込む方法に関するアイデアですか?それとも、私が考慮すべき他のアプローチがありますか? (Railsの5.0.1)Rails予約システム

モデル:

class Reservation < ApplicationRecord 
    belongs_to :user, optional: true 
    belongs_to :table, optional: true 

    scope :on, -> (day, time) { where('date = ? AND starts_at <= ? AND ends_at > ?', day, time, time)} 
end 

class Table < ApplicationRecord 
    has_many :reservations 
    has_many :users, through: :reservations 

    def self.free_on(day, time) 
    reserved_table_ids = Reservation.on(day, time).pluck('DISTINCT table_id') 
    where.not(id: reserved_table_ids) 
    end 

    def self.reserved_on(day, time) 
    reserved_table_ids = Reservation.on(day, time).pluck('DISTINCT table_id') 
    where(id: reserved_table_ids) 
    end 
end 

class User < ApplicationRecord 
    has_many :reservations 
    has_many :tables, through: :reservations 
end 

コントローラー:

class TablesController < ApplicationController 
    def index 
    @reserved_tables = Table.reserved_on(params[:day], params[:time]) 
    @open_tables = Table.free_on(params[:day], params[:time]) 
    end 
end 

ビュー:reserved_table_idsが空になると問題があるよう

<%= form_tag(tables_path, :method => "get", id: "table-search-form") do %> 
    <%= text_field_tag :day, params[:day], class:"datepicker", placeholder: "Select Day" %> 
    <%= text_field_tag :time, params[:time], class:"timepicker", placeholder: "Select Time" %> 
    <%= submit_tag "Search", :name => nil %> 
<% end %> 

答えて

0

思えます。余分な条件を追加してみることができますか?

def self.free_on(day, time) 
    reserved_table_ids = Reservation.on(day, time).pluck('DISTINCT table_id') 
    if reserved_table_ids 
    where.not(id: reserved_table_ids) 
    else 
    all 
    end 
end 

または三元を使用して:

def self.free_on(day, time) 
    reserved_table_ids = Reservation.on(day, time).pluck('DISTINCT table_id') 
    reserved_table_ids ? where.not(id: reserved_table_ids) : all 
end 
+0

私はあまりにも、条件を考えていたが、それはきれいですので、私はあなたの三ソリューションが好きです。ありがとう! – rymcmahon

関連する問題