2014-05-02 20 views
29

Ich bin etwas neu bei Schienen und ich versuche, ein Benutzer-Login zu erstellen. Ich ging durch das Tutorial gefunden here. Am Ende hatte ich mir "attr_accessible" für die Massenvergabe hinzufügen. Aber wenn ich es tat, dass ich folgende Fehlermeldung bekommen:Undefinierte Methode attr_accessible

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

ich auf diesem post sah, dass ich < Activerecord :: Base neeed. Aber ich habe das inklusive. Hier ist der Code für mein Benutzermodell:

class User < ActiveRecord::Base 

    attr_accessor :password 
    EMAIL_REGEX = /\A[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\z/i 
    validates :username, :presence => true, :uniqueness => true, :length => { :in => 3..20 } 
    validates :email, :presence => true, :uniqueness => true, :format => EMAIL_REGEX 
    validates :password, :confirmation => true #password_confirmation attr 
    validates_length_of :password, :in => 6..20, :on => :create 
    before_save :encrypt_password 
    after_save :clear_password 
    attr_accessible :username, :email, :password, :password_confirmation 

    def encrypt_password 
    if password.present? 
     self.salt = BCrypt::Engine.generate_salt 
     self.encrypted_password= BCrypt::Engine.hash_secret(password, salt) 
    end 
    end 

    def clear_password 
    self.password = nil 
    end 

end 

Irgendwelche anderen Ideen auf, was dieses Problem verursachen könnte, würde wirklich geschätzt werden, danke!

Bearbeiten: Auf Schienen 4.1. Sieht so aus, als ob es nicht mehr zutrifft. Dank fotanus

+4

[lesen Sie hier] (http://stackoverflow.com/questions/17371334/how-is-attr-accessible-used-in-rails-4). Korrigieren Sie Ihre Frage mit der richtigen Schienenversion, die Sie verwenden, da es für diese Frage wichtig ist. – fotanus

Antwort

74

Keine Massenzuordnung für Rails erlaubt 4.1

statt attr_accessible :username, :email, :password, :password_confirmation in Ihrem Modell mit, verwenden strong parameters. wechseln Sie dazu in Ihrem Userscontroller:

def user_params 
     params.require(:user).permit(:username, :email, :password, :password_confirmation) 
    end 

dann rufen Sie die user_params Methode in der Controller-Aktionen.

15

Nein für Rails Massenzuordnung 4.1

erlaubt

Sie werden so etwas versuchen.

class Person 
    has_many :pets 
    accepts_nested_attributes_for :pets 
end 

class PeopleController < ActionController::Base 
    def create 
    Person.create(person_params) 
    end 

    ... 

    private 

    def person_params 
     # It's mandatory to specify the nested attributes that should be whitelisted. 
     # If you use `permit` with just the key that points to the nested attributes hash, 
     # it will return an empty hash. 
     params.require(:person).permit(:name, :age, pets_attributes: [ :name, :category ]) 
    end 
end 

Siehe

https://github.com/rails/strong_parameters

2

Stellen Sie sicher, Juwel 'protected_attributes' installiert sind, dass dieses Juwel in Ihrem gemfile vorhanden ist und bundle install Terminal laufen. Dann starte deinen Server neu.

Verwandte Themen