将变量从搜索表单传递给预订表单,Ruby on Rails

时间:2013-08-05 14:17:11

标签: ruby-on-rails ruby forms search-form

我想为我的大学创建酒店预订系统,我有一个搜索表格,应该显示所有可用的房间。

<%= 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,否则用户必须再次填写arrivaldeparture日期。 有什么技术可以用来解决这个问题吗?

提前谢谢

2 个答案:

答案 0 :(得分: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中再次读出。

这是一个非常基本的例子,但您可以以任何您喜欢的方式扩展它。

答案 1 :(得分:0)

根据建议,您可以使用隐藏的表单字段,或者您可以执行完整的周转操作,并将您的流程视为向导表单,该表单必须通过多个操作来执行状态。

如果这适合您,请使用Wicked将控制器变为向导。