ruby on rails:确保用户必须在提交前输入值

时间:2013-06-18 04:21:01

标签: ruby-on-rails ruby-on-rails-3 forms validation

我在rails中使用<%= form_for ...%>我想知道我需要做什么才能让用户在提交之前提交值?

我有输入字段,单选按钮和复选框。

<%= form_for @user, :html => {:multipart => true} do |f| %>
  <%= f.text_field :textfield %>
  <%= f.check_box :checkbox %>
  <%= f.radio_button :radiobutton %>
<% end %>

如何告诉我的表单在提交之前需要填写或检查:textfield:checkbox:radiobutton

谢谢!

2 个答案:

答案 0 :(得分:3)

使用model validations确保在保存后续模型之前存在这些属性:

您可以在验证级别上操作并传递要验证的属性:

# app/models/user.rb
validates_presence_of :textfield, :checkbox, :radiobutton # or whatever actual attribute names you choose

或者,您也可以指定为模型运行的验证(许多用户现在更喜欢这种方法):

# app/models/user.rb
validates :textfield, :presence => true # or `presence: true` in Ruby 1.9
validates :checkbox, :presence => true
validates :radiobutton, :presence => true

如果在提交时未填写任何这些属性,则会抛出save上的错误,您可以通过渲染回自您提交的操作来处理错误。

# app/controllers/users_controller.rb
def create
    user = User.new(params[:user])
    if user.save
        # handle if successful
    else
        flash[:message] = "Something did not validate" # if using flash messages
        render :action => :new
    end
end

ALTERNATIVE:

如果您确实想要在之前提交字段,则可以使用Javascript / jQuery验证库,例如jQuery.validationEngine。这些客户端库可以使您完全根据验证标准阻止表单提交 - 也就是说,如果验证失败,表单永远不会通过HTTP发布。

答案 1 :(得分:0)

您也可以使用clientide validation gem来实现此目的。看看它的git repo client_side_validation

在Gemfile中包含ClientSideValidations

gem 'client_side_validations'

然后运行安装生成器

rails g client_side_validations:install

这将安装初始化程序:

config/initializers/client_side_validations.rb

然后根据您的要求取消注释此文件中的某些行。 将其添加到您的application.js文件

//= require rails.validations

并将form_tag更改为:

<%= form_for @user, :validate => true do |f| %>