2013-08-05 25 views
1

我想为酒店创建一个预订系统作为我的大学的项目,我有一个应该显示所有可用房间的搜索表单。将变量从搜索表单传递到预订表单,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,否则用户必须再次填写arrivaldeparture日期。 有什么技术可以用来解决这个问题吗?

预先感谢您

+0

你可以使用'hidden_​​field_tag:search,:value => params [:search]' – MrYoshiji

回答

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中再次读出。

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

+0

谢谢你,我想出来了 – AndyB

0

至于建议,你可以使用隐藏的表单字段,或者你可以做一个完整的周转,看看你的过程已经通过几个动作进行状态的向导形式。

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

相关问题