1

我正在做一个月的 rails,但 attr_accessible 函数有问题。我已经将它作为一个 gem 安装在 rails 4(gem 'protected_attributes') 并与 simple_form 一起使用。

但问题是,当我用名称更新表单时,它不记得了!但它说它更新成功?

这是我的 user.rb

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  attr_accessible :email, :password, :password_confirmation, :remember_me, :name
end
4

1 回答 1

3

由于您正在使用Devise,您可以删除整attr_accessible行(以及strong_parametersgem,请参见下文)。Devise 提供了一个控制器 ,它已经为您处理注册。

如果要向用户添加其他属性,可以Devise::RegistrationsController使用自定义控制器进行子类化:

# app/controllers/registrations_controller
class RegistrationsController < Devise::RegistrationsController

  private

  def sign_up_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation)
  end

  def account_update_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation, :current_password)
  end
end

然后,您需要告诉 Devise 路由到您的自定义控制器:

# config/routes.rb
devise_for :users, :controllers => { registrations: 'registrations' }

附言。我还建议移除strong_parametersgem 并使用开箱即用的Rails 4 strong parameters。模型级别的白名单参数存在几个已知问题(例如,不同操作的不同参数)。

于 2014-10-26T13:04:14.187 回答