Rails 4在created_at日期之间搜索

时间:2015-04-16 21:51:12

标签: ruby-on-rails database forms search controller

我是Ruby on Rails的初学者。我有一个反馈模型。我想搜索反馈数据库,以便使用created_at字段在选定的日期范围内获得结果。所以我输入例如" 14/04/15#34;在一个盒子和16/04/15"当我点击搜索时,它会显示输入日期之间的@feedbacks,我稍后会添加jquery日期选择器来选择文本字段中的日期,但我需要首先运行的东西。

搜索时没有任何反应!他们都保持原样。我有3个反馈,创建于字段,13/04 / 15,14 / 04 / 15,16 / 04/15。我输入14/04/15到第一个字段,16/04/15到第二个字段并点击搜索。这应该按照2015年4月14日,2015年4月16日,2015年4月13日的顺序提出反馈意见。

对不起,如果之前已经回答过,但似乎没有任何帮助我。我的反馈索引中有一个表单:

<%= form_tag(feedbacks_path, :method => "get") do %>
<%= text_field_tag :start_date, params[:start_date] %>
<%= text_field_tag :end_date, params[:end_date] %>
<%= submit_tag "Search", :name => nil %>
<% end %>

这在我的反馈控制器中:

 def index
 @feedbacks = Feedback.where("created_at >= :start_date AND created_at <= :end_date",
 {start_date: params[:start_date], end_date: params[:end_date]})
 @feedbacks = Feedback.where(user_id: current_user)
end

URL:

 http://localhost:3000/feedbacks?utf8=%E2%9C%93&start_date=14%2F04%2F2015&end_date=16%2F04%2F2015

的Gemfile:

gem&#39; rails&#39;,&#39; 4.1.6&#39;

ruby​​ 2.1.3p242

2 个答案:

答案 0 :(得分:0)

最后一个语句是

@feedbacks = Feedback.where(user_id: current_user)

您只是为当前用户提供了大量反馈。您的日期不会在该声明中使用。

答案 1 :(得分:0)

简而言之,您应该像这样链接您的查询

def index @feedbacks = Feedback.where("created_at >= :start_date AND created_at <= :end_date", {start_date: params[:start_date], end_date: params[:end_date]}) @feedbacks = @feedbacks.where(user_id: current_user) end

您甚至可以使用范围条件缩短搜索范围:

def index @feedbacks = Feedback.where(created_at: [params[:start_date]..params[:end_date]]) @feedbacks = @feedbacks.where(user_id: current_user) end