首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不允许的参数添加新字段以在rails 4.0中设计

不允许的参数添加新字段以在rails 4.0中设计
EN

Stack Overflow用户
提问于 2013-06-30 04:14:34
回答 6查看 38.6K关注 0票数 53

对rails的工作非常陌生。我已经使用Devise实现了一个基本的登录系统。我正在尝试向sign_up页面添加两个新字段(bio:string,name:string)。我已经正确地显示了所有内容,并且新字段已添加到数据库中(当我在SQLbrowser中查看它时),但是,它们没有填充,并且在用户提交sign_up表单后,会出现一条消息,其中部分内容如下:

代码语言:javascript
复制
Unpermitted parameters: bio, name

我已经将这两个字符串添加到_devise_create_users.rb中

代码语言:javascript
复制
  # added
  t.string :bio
  t.string :name

我让他们出现在schema.rb中

代码语言:javascript
复制
ActiveRecord::Schema.define(version: 20130629002343) do

  create_table "users", force: true do |t|
    t.string   "email",                  default: "",    null: false
    t.string   "encrypted_password",     default: "",    null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          default: 0
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "shortbio"
    t.boolean  "admin",                  default: false
    t.string   "realname"
    t.string   "name"
    t.string   "bio"
  end

  add_index "users", ["email"], name: "index_users_on_email", unique: true
  add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true

end

我的user.rb

代码语言:javascript
复制
class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
   #:token_authenticatable, :confirmable,
   #:lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

end

这个问题是否与强参数有关?我很难理解它们以及在哪里/如何实现它们。

EN

回答 6

Stack Overflow用户

发布于 2013-06-30 04:32:49

请确保您使用的至少是Devise 3.0.0。添加到您的应用程序控制器:

代码语言:javascript
复制
before_filter :update_sanitized_params, if: :devise_controller?

def update_sanitized_params
  devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:bio, :name)}
end

文档:https://github.com/plataformatec/devise#strong-parameters

票数 40
EN

Stack Overflow用户

发布于 2013-07-04 12:19:35

我在这方面也遇到了麻烦。devise网站上的文档和一些论坛都很有帮助。这就是我最终要做的:

在自定义(app/controllers/users/registrations_controller.rb) RegistrationsController中

代码语言:javascript
复制
# app/controllers/users/registrations_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController
    before_filter :update_sanitized_params, if: :devise_controller?

    def update_sanitized_params
       devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:name, :email,   :password, :password_confirmation)}
    end
end

然后在您的路由文件(config/routes.rb)中,为您的devise_for语句添加以下内容:

代码语言:javascript
复制
devise_for :users, controllers: {registrations: "users/registrations"}
票数 11
EN

Stack Overflow用户

发布于 2015-08-18 08:14:57

下面是在我的rails 4.2.1应用程序中工作的另一种简单的方法:

创建以下文件

代码语言:javascript
复制
/config/initializers/devise_permitted_parameters.rb

和代码..

代码语言:javascript
复制
module DevisePermittedParameters
  extend ActiveSupport::Concern

  included do
    before_filter :configure_permitted_parameters
  end

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << :name
    devise_parameter_sanitizer.for(:account_update) << :name

    devise_parameter_sanitizer.for(:sign_up) << :bio
    devise_parameter_sanitizer.for(:account_update) << :bio
  end

end

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

https://stackoverflow.com/questions/17384289

复制
相关文章

相似问题

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