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