用户未定义的方法attr_accessible错误

时间:2014-05-19 17:19:42

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-4.1

我正在尝试创建各种登录信息。我创建了一个用户脚手架,并将此代码放在我的user.rb

class User < ActiveRecord::Base
attr_accessible :name,  :password_digest, :password, :password_confirmation

has_secure_password
end

我一直收到此错误

undefined method `attr_accessible' for #<Class:0x396bc28>

Extracted source (around line #2):
1
2
3
4
5

class User < ActiveRecord::Base
  attr_accessible :name,  :password_digest, :password, :password_confirmation

  has_secure_password
end

Rails.root: C:/Sites/web

1 个答案:

答案 0 :(得分:16)

attr_accessible不适用于Rails version 4+。你必须使用强大的参数。

使用强参数,属性白名单已移至控制器级别。从模型中删除attr_accessible来电。

以下是Rails指南中有关如何使用 Strong Parameters

的示例

在您的情况下,您可以执行以下操作:

class UsersController < ApplicationController
  ## ...
  def create
    @user = User.new(user_params) ## Invoke user_params method
    if @user.save
      redirect_to @user, notice: 'User was successfully created.' 
    else
      render action: 'new'
    end       
  end
  ## ... 

  private
  ## Strong Parameters 
  def user_params
    params.require(:user).permit(:name, :password_digest, :password, :password_confirmation)
  end
end 

您可以在我的回答下面记下@Frederick评论,

  

你仍然可以使用attr_accessible,但它已被提取到。{1}}   protected_attributes宝石(虽然明显强大的参数是   前进的方式)