1

我在 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填写或检查或其他内容?

谢谢!

4

2 回答 2

3

在保存后续模型之前,使用模型验证确保这些属性存在:

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

# 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

选择:

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

于 2013-06-18T04:23:41.063 回答
0

为此,您还可以使用客户端验证 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| %>
于 2013-06-18T04:42:56.640 回答