2011-03-29 53 views
0

我想验证一个表单模型中的值(一个复选框实际上),但我有很多的麻烦找什么传递只会验证:如何验证一个表单的值的Rails 3

validates :agreement, :agreement => true 

我已经得到了其他事情一样工作:

validates :password, :presence => true, :length => {:minimum => 6, :maximum => 25}, :confirmation => true 

我的看法是这样的:

 <% form_for :signup_form, :url => {:controller => "user", :action => "post_signup"} do |f| %> 

... <%= f.check_box(:agreement)%>我同意<%= link_to(“服务条款”,:controller =>“about”,:action =>“terms”)%>和< %=的link_to( “隐私政策”,:控制器=> “约”:动作=> “隐私”)%> ...

然后进入我的控制器:

agreement = params[:signup_form][:agreement] 

new_user = User.create(:login_name => login_name, :first_name => first_name, :last_name => last_name, :email => email, :password => password, :agreement => agreement, :created_at => DateTime.now()) 

然后我的模型。

感谢您提前提供任何帮助。

回答

1

你要在页面上显示你的错误,并确保您的验证工作在所有。我会重新实现您的验证为:

# app/models/user.rb 
class User < ActiveRecord::Base 
    validates :agreement do |ag| 
    ag.errors.add "Must agree to the terms" unless self.agreement 
    end 

end 

看到http://asciicasts.com/episodes/211-validations-in-rails-3的综合治疗,包括一个不错的方式来显示错误。

+0

谢谢!以一种很好的方式显示错误也是我一直在尝试做的事情。在我刚刚检查了控制器中明显不正确的输入并将闪存变量设置为我想要显示的内容之前:flash [:signup_error] =“找到了不完整的表单,请重试” redirect_to(:controller =>“user”, :action =>“注册”) – tarabyte 2011-03-29 18:36:27

+0

不错,我没有意识到你可以通过这种方式进行验证。我使用了validate:method_name – kvirani 2012-05-15 13:12:08