Rails 4 - check_box_tag的简单验证失败

时间:2018-05-27 15:12:21

标签: ruby-on-rails validation ruby-on-rails-4 checkbox

我有一个支持表单,用户可以在其中发送消息。此支持表单应该有一个复选框,并且只有在激活了复选框后才会发送消息。到目前为止,我的support.rb模型(只是相关部分):

class Support
  include ActiveModel::Validations

  attr_accessor :dataprotection
  validates :dataprotection, :acceptance => true
end

据我所知,我甚至不需要attr_accessor引用,因为它创建了一个虚拟属性,如果:dataprotection不是我的模型的一部分,所以在添加:dataprotection后我还没有完成迁移。无论如何,我不会将消息和数据保存在数据库中,只是将其发送到电子邮件地址。

视图是(再次只是相关部分,我使用haml):

= form_for :support, :url => { :action => "create" }, :html => { :method => :post } do |f|
  = render 'shared/error_messages_support'
    %div
      = check_box_tag 'dataprotection'
      = label_tag(:dataprotection, simple_format(t"support.dataprotection"))

表单显示正确,同时出现复选框并且可单击。但是如果用户没有检查它,无论如何都会发送表单,没有错误信息。

如果未勾选方框,我需要更改哪些内容才能收到错误消息?

我的控制器是

class SupportsController < ApplicationController

  def new
    @support = Support.new(:id => 1) # id is used to deal with form
  end

  def create
    @support = Support.new(params[:support])
      if @support.save
        flash[:success] = t "support.flashsuccess"
        redirect_to(root_path)
      else
        render 'new'
      end
    end
  end

我的Gemfile是:

ruby '2.0.0'

source 'http://rubygems.org'

gem 'rails', '4.0.0'
gem 'jquery-rails', '2.1.1'
gem 'capistrano', '2.14.1'
gem "therubyracer", '~> 0.11.4'
gem 'carrierwave', '0.8.0'
gem 'haml', '~> 4.0'
gem 'mysql2', '0.3.11'
gem 'rmagick', '2.13.2'
gem 'fancybox2-rails', '~> 0.2.8'
gem 'sitemap_generator', '3.4'
gem 'whenever', '0.7.3', :require => false
gem 'will_paginate', '3.0.5'
gem "friendly_id", "~> 5.0.3"
gem 'turbolinks'
gem 'jquery-turbolinks'
gem 'protected_attributes'
gem 'globalize', '~> 4.0.2'
gem 'sass-rails', '~> 4.0.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'uglifier', '>= 1.3.0'

group :development do
  gem 'rspec-rails', '2.13.2'
  gem 'annotate', '~> 2.4.1.beta'
  gem 'faker', '0.9.5', :require => false
  gem "database_cleaner", "~> 1.0.1"
  gem 'debugger'
end

0 个答案:

没有答案