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
        }
    });
})()