首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >validates_acceptance_of工作但没有在数据库中保存真正的user:age_valid

validates_acceptance_of工作但没有在数据库中保存真正的user:age_valid
EN

Stack Overflow用户
提问于 2015-07-12 00:09:20
回答 2查看 279关注 0票数 1

validate_acceptance_of正在工作,但如果选中,它不会将真保存到db用户列age_valid。

users.controller.rb

代码语言:javascript
复制
class UsersController < ApplicationController
.
.
.
private

def user_params
    params.require(:user).permit(:name, :birthdate, :email, :password,
                               :password_confirmation, :age_valid)
end
end

_form.html.erb

代码语言:javascript
复制
<%= 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

代码语言:javascript
复制
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

代码语言:javascript
复制
<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>

迁移使用

代码语言:javascript
复制
class AddAgeValidToUser < ActiveRecord::Migration
 def change
   add_column :users, :age_valid, :boolean, default: false
end
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-12 05:53:52

下面这些对我来说很管用。

user.rb

代码语言:javascript
复制
class User < ActiveRecord::Base

validates_acceptance_of :age_valid,
:accept => true,
:message => "You must verify that you are at least 18 years of age."

end

new.html.erb

代码语言:javascript
复制
<%= 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

票数 0
EN

Stack Overflow用户

发布于 2015-07-12 11:20:08

您意外地将两种定义验证的语法方法混合在一起。

新语法:

代码语言:javascript
复制
validates :field,
  property: {setting: "value"}

旧语法:

代码语言:javascript
复制
validates_property_of :field, setting: "value"

从参数中移除acceptance选项,就像它在方法名称中已经说明的那样。

如果您更愿意使用新的语法,下面是如下所示:

代码语言:javascript
复制
validates :age_valid, acceptance: {message: "..."}

在这种特殊情况下,使用新语法没有任何好处。但是,在其他情况下,它允许您使用多个条件验证属性,而不必重复它们或诉诸元编程。

当涉及到代码可维护性时,保持一致性:选择一个或另一个,并在项目需要的地方使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31363089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档