【发布时间】:2014-04-14 20:41:45
【问题描述】:
这是表格:
|policies|
|id| |name| |date|
1 ABC 2013-01-01
2 DEF 2013-01-21
这里是控制器:
class PolicyController < ApplicationController
def index
@policies = Policy.find(:all,:conditions=>['date BETWEEN ? AND ?',params[cam],params[:cam2] ])
end
end
这是模型:
class Policy < ActiveRecord::Base
end
这里是视图:
<% CalendarDateSelect.format=(:hyphen_ampm )%>
<% calendar_date_select_style "silver" %>
<% translation_calendar %>
<% form_tag :controller=>"policy",:action=>"index" do %>
From: <%= calendar_date_select_tag "cam", params[:cam] %>
To: <%= calendar_date_select_tag "cam2",params[:cam2] %>
<%= submit_tag "Search", :name => nil %></p>
<% end %>
<% @policies.each |p| do %>
<%= p.date %>
<% end %>
在我的 2 个日历文本有值之前,如何阻止搜索按钮?
我试过了:
class Policy < ActiveRecord::Base
validates_presence_of :cam
end
请有人可以帮助我,或者也许是一个javascript?
我将不胜感激。
这是朋友告诉我的:
named_scope :by_calendar_date,lambda { |cam1, cam2| } {
if cam1.nil? && cam2.nil?
scoped
elsif cam1.nil?
where("date < ?",cam2)
elsif cam2.nil?
where("date > ?", cam1)
else
where("date BETWEEN ? AND ?",cam1,cam2)
end
}
#this would perform the same functionality so both are not needed but just for edification
def self.by_calendar_date(cam1,cam2)
if cam1.nil? && cam2.nil?
scoped
elsif cam1.nil?
where("date < ?",cam2)
elsif cam2.nil?
where("date > ?", cam1)
else
where("date BETWEEN ? AND ?",cam1,cam2)
end
end
【问题讨论】:
-
验证不应该发生在视图中,它应该发生在控制器中。
-
哦,您正在寻找验证日历的技巧,如果它们没有值,则提交按钮将不起作用
-
您的 lambda 不正确,它是一个块,因此应该在大括号之间和管道变量之后执行。我更新了我的答案,所以你可以看到。您不需要两种方法都选择 named_scope 或 self.by_calendar_date 方法。
-
@engineersmnky 我希望我的参数在点击搜索之前真的很有必要
-
好的,在这种情况下使用下面列出的 jQuery 验证
标签: ruby-on-rails ruby calendar ruby-on-rails-2