rails 4中的attr_accessible

时间:2014-10-26 10:24:03

标签: ruby-on-rails devise attr-accessible

我正在执行onemonth rails并且我遇到了attr_accessible函数的问题。我已将它作为gem 4(gem'en protected_attributes')中的gem安装,并将其与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

1 个答案:

答案 0 :(得分:3)

由于您使用的是Devise,因此您可以移除整个attr_accessible行(以及strong_parameters gem,请参阅下文)。 Devise提供a controller,它已经为您处理注册。

如果要向用户添加其他属性,可以使用自定义控制器将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' }

<强> PS 即可。我还建议删除strong_parameters gem并使用开箱即用的Rails 4 strong parameters。模型级别的白名单参数存在几个已知问题(例如,不同操作的不同参数)。