Передача переменных из поисковой формы в форму бронирования, Ruby on Rails
Я хочу создать систему бронирования отелей как проект для моего университета, у меня есть поисковая форма, которая должна отображать все доступные номера.
<%= form_tag mainpage_path, :method => 'get' do %>
<p>
<%= select_tag(:search, options_for_select([['Einzelzimmer'], ['Doppelzimmer']]))%>
<br/>
Arrival: <%= date_select :arrival, 'Arrival', use_short_month: true, order: [:day, :month, :year] %> <br/>
Departure: <%= date_select :departure, 'Departure', use_short_month: true, order: [:day, :month, :year], default:Date.tomorrow %> <br/>
<%params[:search] %>
<%params[:arrival]%>
<%params[:departure]%>
<%= submit_tag "Search" %>
</p>
<% end %>
если все это работает, вы должны увидеть номер, который вы можете зарезервировать. но я хочу сохранить params[:arrival]
а также params[:departure]
и передать их booking form
потому что в противном случае пользователь должен заполнить arrival
а также departure
даты снова. Есть ли какая-то техника, которую я могу использовать, чтобы решить это?
заранее спасибо
2 ответа
Вам нужно будет сохранить время прибытия и отправления в переменной экземпляра в вашем контроллере поиска, чтобы вы могли получить к нему доступ при рендеринге представления, то есть при отображении доступных комнат.
class SearchController < ApplicationController
def search
@arrival = params[:arrival]
@departure = params[:departure]
# Do all the searching and store them in @rooms
respond_with @rooms
end
end
Затем сделайте вид для выбора комнаты
<%= render :partial => 'room', :collection => @rooms %>
и свяжите каждую комнату с путем бронирования и укажите дату прибытия и отъезда:
<%= link_to "Book room #{room.id}", book_room_path(room, :arrival => @arrival, :departure => @departure %>
Передавая хэш #link_to, вы можете установить параметры GET, которые вы можете снова прочитать в вашем BookingsController.
Это довольно простой пример, но вы можете расширить его любым удобным для вас способом.
Как и предполагалось, вы можете использовать скрытые поля формы, или вы можете сделать полный оборот и посмотреть на ваш процесс как на форму мастера, которая должна переносить состояние посредством нескольких действий.
Если это вас устраивает, используйте Wicked, чтобы превратить ваш контроллер в мастера.