2014-05-19 16 views
4

我正在嘗試創建排序的登錄。我創建了一個用戶腳手架和有這樣的代碼在我user.rb用戶的未定義方法attr_accessible錯誤

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 
+2

你是什麼版本的Rails? –

+0

1.9.3p484是我的版本 – user3018763

+0

這就是'Ruby..not rails ..檢查就像'rails -v' .. –

回答

16

attr_accessible不適用於Rails version 4+。你將不得不使用強大的參數。

具有強參數時,屬性白名單已移至控制器級別。從您的模型中刪除attr_accessible呼叫。

下面是如何使用Strong Parameters

在你的情況,你可以做這樣的事情的Rails指南中的例子:

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但它已被提取到 protected_attributes寶石(雖然明顯的參數是 前進的道路)

+0

如何使用帶有強參數的has_secure_password? – user3018763

+0

只需在UsersController中允許屬性':name,:password_digest,:password,:password_confirmation'就像回答中提供的示例鏈接I中所示。 –

+0

我已經用一個例子更新了我的答案,供您參考。 –