【问题标题】:How can I find date range in Ruby on Rails?如何在 Ruby on Rails 中找到日期范围?
【发布时间】:2011-08-11 11:20:21
【问题描述】:

我想搜索给定日期范围内的数据。我有一个包含名称、地点、start_at 和 end_at 详细信息的数据库。我可以通过在控制器中定义查找方法来搜索名称和地点。以下是我的控制器代码。

def find
  @events=Event.find(:all, :conditions=>["venue = ? OR name = ?", params[:search_string], params[:search_string]])
end

然后它会找到地点或名称。但是当我将 start_at 添加到这段代码中时,它会返回一个异常。如何从数据库中搜索相关的日期范围? lz有人可以帮助我吗?我正在使用 postgresql 和 ruby​​ 1.8.7 和 rails 2.3.8 版本。

我改变了我的查找方法如下...

def find    
  if (params[:search_string])
    @events=Event.find(:all, :conditions=>["venue = ? OR name = ?", params[:search_string], params[:search_string]])
  else 
    @events= Event.all(:conditions => ["start_at >= ? AND end_at <= ?",  params[:start_at], params[:end_at]])
  end
end                                                           

首先 if 语句正常工作。但其他部分不起作用。也不例外。它不会从数据库中检索与日期相关的数据。由于未检索数据,我将此 if 语句添加到我的代码中。有人可以帮我纠正第二部分吗?我在搜索文本框中输入日期。但它不会检索任何数据。

【问题讨论】:

  • 什么异常?你是怎么add start_at into this code的?
  • start_at 是日期变量,我将其添加为 def find @events=Event.find(:all, :conditions=>["venue = ? OR name = ? OR start_at = ?", params[: search_string], params[:search_string],, params[:search_string]]) 结束
  • 您的示例中的 start_at 是 STRING 而不是 DATE。
  • 是的 start_at 是一个日期....我怎样才能改变这个?
  • 如果问题尚未回答,为什么要将答案标记为已接受?如果人们认为您的问题已得到解答,他们将不会再看它。

标签: ruby-on-rails ruby


【解决方案1】:

看看http://guides.rubyonrails.org/active_record_querying.html 尝试类似:

@events = Event.where("(venue = ? OR name = ?) AND start_at >= ? AND end_at <= ?", params[:search_string], params[:search_string], params[:start_at], params[:end_at])

编辑

在 Rails 2.3.x 中,应该是

@events = Event.all(:conditions => ["(venue = ? OR name = ?) AND start_at >= ? AND end_at <= ?", params[:search_string], params[:search_string], params[:start_at], params[:end_at]])

注意条件是以数组的形式给出的。

【讨论】:

  • 它不工作......我再次遇到异常。 #<0x45a1b38>
【解决方案2】:

我可以找到一种方法来搜索给定日期范围内的数据。我是单独做的。我在布局中创建了两个 text_field_tag 并创建了控制器代码,如下所示。

    def find
    @events= Event.all(:conditions => ["start_at >= ? AND end_at <= ?",  params[:search], params[:search_string]])

    end

然后我在布局中添加了以下代码。

    <span style="text-align: right">
    <% form_tag "/events/find" do %>
    <%= text_field_tag :search%>
    <%= text_field_tag :search_string %>
    <%= submit_tag "search" %>
    <% end %>
    </span>

我从数据库中获取数据。现在我想将这两者结合起来。按日期范围查找数据需要两个 text_field_tag,按名称查找数据只需要一个 text_field_tag。那么我该怎么做呢?还需要你的帮助....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    相关资源
    最近更新 更多