Передача переменных из поисковой формы в форму бронирования, 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, чтобы превратить ваш контроллер в мастера.

Другие вопросы по тегам