Ruby on rails 如何在视图中验证参数?
这是表格:Ruby on rails 如何在视图中验证参数?,ruby-on-rails,ruby,calendar,ruby-on-rails-2,Ruby On Rails,Ruby,Calendar,Ruby On Rails 2,这是表格: |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],pa
|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-PolicyController['datebetween?AND?',params[cam],params[:cam2]]
结束
结束
模型如下:
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 %>
“策略”,操作=>“索引”do%>
发件人:
致:
零%>
在“我的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
named_scope:by_calendar_date,lambda{cam1,cam2}{
如果cam1.nil?&cam2.nil?
范围
elsif cam1.nil?
其中(“日期<?”,cam2)
elsif cam2.nil?
其中(“日期>?”,cam1)
其他的
其中(“日期介于?和之间?”,cam1,cam2)
结束
}
#这将执行相同的功能,因此不需要两者,而只是为了教化
定义自日历日期(cam1、cam2)
如果cam1.nil?&cam2.nil?
范围
elsif cam1.nil?
其中(“日期<?”,cam2)
elsif cam2.nil?
其中(“日期>?”,cam1)
其他的
其中(“日期介于?和之间?”,cam1,cam2)
结束
结束
由于这是一项搜索功能,我认为您无需验证,只需执行此操作即可
class Policy < ActiveRecord::Base
named_scope :by_calendar_date,lambda{|cam1,cam2|
if cam1.nil? && cam2.nil?
{:conditions => {}}
elsif cam1.nil?
{:conditions => ["date < ?",cam2]}
elsif cam2.nil?
{:conditions => ["date > ?", cam1]}
else
{:conditions => ["date >= ? AND date <= ?",cam1,cam2]}
end
}
end
通过这种方式,用户可以单独设置参数,也可以不设置任何参数。查看此小提琴
HTML
这样做的好处是,不管表单中有多少输入字段,如果至少有1个字段为空,它将始终保持按钮处于禁用状态。它还检查了屏幕上的空白,我认为这会使可用性更加方便
我希望这有帮助 只需将
scope
替换为named_scope
,并将->
替换为lambda{cam1,cam2}
块,使其兼容….@MrYoshiji的答案还将使用named_scope
和lambda
,后者将rails 3简化为->(…)
我编辑了这篇文章,写道Yoshiji先生写了但仍然不起作用我得到了一个未定义的方法“by_calendar_date”,用于“验证不应该发生在视图中,它应该发生在控制器中。哦,你在寻找一个验证日历的技巧,如果它们没有值,“提交”按钮将不起作用。如果lambda不正确,则它是一个块,因此执行应该发生在花括号之间和管道变量之后。我更新了我的答案,所以你可以看到。您不需要同时使用这两种方法—选择命名的\u范围或self.by\u日历\u日期方法。@engineersmnky我希望我的参数在单击Search之前确实是必要的。在这种情况下,请使用下面列出的jQuery验证。您需要将此jQuery代码转换为原型代码
def index
@policies = Policy.by_calendar_date(params[:cam1],params[:cam2])
end
// note the change... I set the disabled property right away
<input type="submit" id="register" value="Register" disabled="disabled" />
(function() {
$('form > input').keyup(function() {
var empty = false;
$('form > input').each(function() {
if ($(this).val() == '') {
empty = true;
}
});
if (empty) {
$('#register').attr('disabled', 'disabled'); // updated according to http://stackoverflow.com/questions/7637790/how-to-remove-disabled-attribute-with-jquery-ie
} else {
$('#register').removeAttr('disabled'); // updated according to http://stackoverflow.com/questions/7637790/how-to-remove-disabled-attribute-with-jquery-ie
}
});
})()