Ruby on Rails:运营商
问题描述:
我的应用程序允许用户搜索许多不同的字段和日期以查找项目记录。目前,当您选择某个时间尺度,即(从现在开始1年),搜索将正常返回。当您再次使用相同时间标度和某个客户端进行搜索时,搜索将再次正常返回。当我试图在客户端上进行搜索时,问题在于。搜索没有返回结果,这是错误的。我敢肯定它是与我的运营商在搜索方法:Ruby on Rails:运营商
def self.search(search_client, search_start_date_dd, search_start_date_A, search_start_date_B, search_keywords)
return scoped unless search_client.present? || search_start_date_dd.present? || search_start_date_A.present? || search_start_date_B.present? || search_keywords.present?
todays_date = DateTime.now.to_date
if !search_start_date_A.blank? or !search_start_date_B.blank?
search_start_date_A = Date.parse(search_start_date_A).strftime("%Y-%m-%d")
search_start_date_B = Date.parse(search_start_date_B).strftime("%Y-%m-%d")
todays_date = ""
end
if search_start_date_dd.blank?
todays_date = ""
end
where(['client LIKE ? AND (DATE(start_date) BETWEEN ? AND ? OR DATE(start_date) BETWEEN ? AND ?) AND keywords LIKE ?',
"%#{search_client}%", search_start_date_dd, todays_date , search_start_date_A, search_start_date_B, "%#{search_keywords}%"
])
end
我相信这个问题是在'client LIKE ? AND (DATE(start_date) BETWEEN ? AND ? OR DATE(start_date) BETWEEN ? AND ?) AND keywords LIKE ?'
希望有人能看到它。提前致谢。只是为了让你知道我是一个小白导轨以及:)
编辑:
这里是我的搜索视图,让您了解搜索如何工作:
<h1>Search</h1>
<%# if @project_search.total_entries > 0 %>
<%= form_tag search_path, method: :get do %>
Client :
<%= select(@projects, :client, Project.all.map {|p| [p.client]}.uniq, :prompt => "-Any-", :selected => params[:client]) %></br>
Select start dates from:
<%= select_tag "start_date_dd", options_for_select({
"Select a period" => "",
"3 days ago" => DateTime.now.to_date - 3.days, # = 259_200 sec.
"1 week ago" => DateTime.now.to_date - 1.week, # = 604_800 sec.
"1 month ago" => DateTime.now.to_date - 1.month, # = 2_592_000 sec.
"6 months ago" => DateTime.now.to_date - 6.months, # = 15_552_000 sec.
"1 year ago" => DateTime.now.to_date - 1.year, # = 31_557_600 sec.
}, :selected=>params[:start_date_dd])%>
until now <%= l DateTime.now.to_date %>, or select project start dates between
<%= text_field_tag :start_date_A, params[:start_date_A] %>
and
<%= text_field_tag :start_date_B, params[:start_date_B] %>
Keywords :
<%= text_field_tag :keywords, params[:keywords] %></br>
<%= submit_tag "Search", name: nil %>
答
固定我自己的问题:/
我只是增加了一个else
def self.search(search_client, search_start_date_dd, search_start_date_A, search_start_date_B, search_keywords)
return scoped unless search_client.present? || search_start_date_dd.present? || search_start_date_A.present? || search_start_date_B.present? || search_keywords.present?
todays_date = DateTime.now.to_date
if !search_start_date_A.blank? or !search_start_date_B.blank?
search_start_date_A = Date.parse(search_start_date_A).strftime("%Y-%m-%d")
search_start_date_B = Date.parse(search_start_date_B).strftime("%Y-%m-%d")
todays_date = ""
end
if search_start_date_dd.blank?
todays_date = ""
end
if (search_start_date_A.blank? or search_start_date_B.blank?) and search_start_date_dd.blank?
where(['client LIKE ? AND keywords LIKE ?',
"%#{search_client}%", "%#{search_keywords}%"
])
else
where(['client LIKE ? AND (DATE(start_date) BETWEEN ? AND ? OR DATE(start_date) BETWEEN ? AND ?) AND keywords LIKE ?', "%#{search_client}%", search_start_date_dd, todays_date , search_start_date_A, search_start_date_B, "%#{search_keywords}%"
])
end
end
有一些小技巧,当你想解决这样的问题,火了IRB。在那里测试你的假设,特别是当你有一个复杂的查询。如果它有效,那么模型是好的,那么你可以检查你是否能够从视图中传递变量。另外,看看范围,它会让你的代码更具可读性。 – Pran 2012-08-07 15:10:28
我刚刚开始学习ROR。我需要学习如何使用IRB,我认为。谢谢你的提示 – Jazz 2012-08-07 15:12:49