2014-01-07 105 views
0

我使用bootstrap-datepicker.js(http://www.eyecon.ro/bootstrap-datepicker/)在rails视图中设置表的日期范围。防止从参数中剥离日期选择器值

calls.html.erb

<form class="form-horizontal daterange"> 
    <input type="text" data-date-format="yyyymmdd" id="start-date" name="start"> 
    <span class="add-on">-</span> 
    <input type="text" data-date-format="yyyymmdd" id="end-date" name="end"> 
    <button type="submit" class="btn submit-date">Submit</button> 
    </form> 


    <script type="text/javascript"> 
    $(document).ready(function() { 
     $('#start-date').datepicker({ 
      format: 'yyyy-mm-dd' 
     }); 
     $('#end-date').datepicker({ 
      format: 'yyyy-mm-dd' 
     }); 
     }); 
    </script> 

它通过PARAMS [:开始],而params [:结束]到我用来设置Twilio API调用的日期范围的URL。

Ex。/twilio /通话/开始= 2013-03-01 &末= 2014年1月6日

自从我创建了以下路线进行分页API调用:

的routes.rb

match 'twilio/calls' => 'twilio#calls', :as => :twilio_page 
match 'twilio/calls/:page_id' => 'twilio#calls', :as => :twilio_page 

每当我前进到结果的下一页时,它会去掉日期范围值。

如何保存:start /:end参数?

twilio_controller.rb 更新 - 增加了开始/结束数据

if params[:start].nil? 
@start_date = DateTime.parse((Date.today - 7).to_s).strftime("%Y-%m-%d") 
@end_date = DateTime.parse((Date.today - 1).to_s).strftime("%Y-%m-%d") 
else 
@start_date = params[:start] 
@end_date = params[:end] 
end 

@user = current_user 
@account_sid = @user.twilio_account_sid 
@auth_token = @user.twilio_auth_token 
@page_size = 5 
@page = params[:page_id] || 0 
@sub_account_client = Twilio::REST::Client.new(@account_sid, @auth_token) 
@subaccount = @sub_account_client.account 
@recordings = @subaccount.recordings 
@recordingslist = @recordings.list({:page_size => @page_size, :page => @page, :"date_created<" => @end_date, :"date_created>" => @start_date}) 

回答

0

根据规范:

的PARAMS还将包括来自查询字符串的任何参数。

因此,要消除第一条路线,即不允许任何参数:

# config/routes.rb 
match 'twilio/calls/:page_id' => 'twilio#calls', :as => :twilio_page 

为了说明,假设你是在试图访问/twilio/calls/1?start=2013-03-01&end=2014-01-06。查询字符串实际上已被解析,因此您不仅可以访问page_id参数,还可以访问startend

如果你想保持缺省路由,例如,twilio/calls,你可以声明route redirect如下:

# config/routes.rb 
get '/twilio/calls', to: redirect('/twilio/calls/1') 

这会自动重新路由/twilio/calls所有请求/twilio/calls/1

UPDATE

为了澄清,URL的查询参数被参数化并供给到对应的控制器动作作为params散列的成员。因此,如果路径/twilio/calls/1?start=2013-03-01&end=2014-01-06,您将有权访问params[:page_id]params[:start]params[:end]。你需要后两者传递到您的API调用你的行动:

@recordingslist = @recordings.list({:page_size => @page_size, 
            :page => @page, 
            :"date_created<" => params[:start], 
            :"date_created>" => params[:end] 
            }) 

UPDATE

为了坚持整个页面视图的查询参数,您可以连接传递给说法twilio_page_path查询字符串:

twilio_page_path((@page.to_i + 1).to_s + "?start=" + params[:start] + "&end=" + params[:end]) %> 
+0

这实际上是你帮助我与早期跟进的问题 - http://stackoverflow.com/questions/20958777/create-a-link-for-next-page -in护栏。我尝试删除该路线,但您帮助我创建的分页然后失败。我应该试图暂时存储这些值吗?我在这里看到了一些利用隐藏字段的解决方案。 – macoughl

+0

嗨,是的 - 我记得这个问题。您不应该需要使用隐藏字段......实际上,将URL分页保留为URL路由器是一种很好的做法。你收到的错误是什么? – zeantsoi

+0

没有错误 - 页面加载'twilio/calls',在日期选择器中设置日期范围,页面重新加载到类似'/ twilio/calls /?start = 2013-03-01&end = 2014-01-06'的页面,我使用那些值作为api调用的开始/结束日期,但是当我点击下一页时,params被剥离并且我有'/ twilio/calls/1'。它吹出日期范围,因此用户无法进入该给定范围内的下一页结果。 – macoughl