validate_acceptance_of正在工作,但如果选中,它不会将真保存到db用户列age_valid。
users.controller.rb
class UsersController < ApplicationController
.
.
.
private
def user_params
params.require(:user).permit(:name, :birthdate, :email, :password,
:password_confirmation, :age_valid)
end
end_form.html.erb
<%= simple_form_for(@user) do |f| %>
.
.
.
<%= f.input :age_valid,
:as => :boolean,
:label => false,
:inline_label => 'I am 18 years of age or older.' %>
.
.
.
<% end %>user.rb
class User < ActiveRecord::Base
attr_accessor :remember_token, :age_valid
.
.
.
validates_acceptance_of :age_valid,
:acceptance => true,
:message => "You must verify that you are at least 18 years of age."这一切都可以接受,它不会将数据库列"age_valid“从false更改为true。我要把这件事记录下来。
这是翻译好的DOM
<div class="form-group boolean optional user_age_valid">
<div class="checkbox">
<input value="0" type="hidden" name="user[age_valid]">
<label><input class="boolean optional" type="checkbox" value="1" name="user[age_valid]" id="user_age_valid"> I am 18 years of age or older.</label>
</div>
</div>迁移使用
class AddAgeValidToUser < ActiveRecord::Migration
def change
add_column :users, :age_valid, :boolean, default: false
end
end发布于 2015-07-12 05:53:52
下面这些对我来说很管用。
user.rb
class User < ActiveRecord::Base
validates_acceptance_of :age_valid,
:accept => true,
:message => "You must verify that you are at least 18 years of age."
endnew.html.erb
<%= simple_form_for @user, url: {action: "create"} do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.input :age_valid,
:as => :boolean,
:label => false,
:checked_value => true,
:unchecked_value => false,
:inline_label => 'I am 18 years of age or older.' %>
<%= f.submit %>我删除了属性访问器,将:acceptance => true,更改为:accept => true,并添加了:checked_value => true,:unchecked_value => false
发布于 2015-07-12 11:20:08
您意外地将两种定义验证的语法方法混合在一起。
新语法:
validates :field,
property: {setting: "value"}旧语法:
validates_property_of :field, setting: "value"从参数中移除acceptance选项,就像它在方法名称中已经说明的那样。
如果您更愿意使用新的语法,下面是如下所示:
validates :age_valid, acceptance: {message: "..."}在这种特殊情况下,使用新语法没有任何好处。但是,在其他情况下,它允许您使用多个条件验证属性,而不必重复它们或诉诸元编程。
当涉及到代码可维护性时,保持一致性:选择一个或另一个,并在项目需要的地方使用它。
https://stackoverflow.com/questions/31363089
复制相似问题