복붙노트

[RUBY-ON-RAILS] 정의되지 않은 방법 attr_accessible

RUBY-ON-RAILS

정의되지 않은 방법 attr_accessible

나는 레일 다소 새로운 오전 나는 사용자 로그인을 만들려고하고 있습니다. 나는 여기에있는 튜토리얼을 통해 갔다. 마지막에 그것은 나를 대량 할당은 "attr_accessible"를 추가했다. 그러나 나는 다음과 같은 오류를 가지고 있다고했을 때 :

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

이 게시물에 나는 보았다는 것을 나는 <액티브 :: 자료가 필요합니다. 하지만이 포함되어 있음을해야합니까. 여기 내 사용자 모델에 대한 코드는 다음과 같습니다

class User < ActiveRecord::Base

  attr_accessor :password
  EMAIL_REGEX = /\A[A-Z0-9._%+-]+@[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

이 문제의 원인이 될 수 있는지에 대한 다른 아이디어 정말 감사하겠습니다, 감사합니다!

편집 : 레일에 4.1. 그것과 같은 더 이상 적용되지 않습니다. 감사합니다 fotanus

해결법

  1. ==============================

    1.레일 4.1 허용 없음 대량 할당하지

    레일 4.1 허용 없음 대량 할당하지

    대신 attr_accessible있는의 : 사용자 이름 : 이메일 : 비밀번호 : 모델의 password_confirmation 강한 매개 변수를 사용합니다. 당신은 당신의 UsersController에서이 작업을 수행 할 수 있습니다 :

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

    다음 컨트롤러 액션에 user_params 메서드를 호출합니다.

  2. ==============================

    2.레일 4.1 허용 없음 대량 할당하지

    레일 4.1 허용 없음 대량 할당하지

    당신이 뭔가를 시도해야합니다.

    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
    

    보내다

    https://github.com/rails/strong_parameters

  3. ==============================

    3.이 보석은 당신의 gemfile에 있는지, 당신이 설치되어 보석 'protected_attributes'을 확인하고 터미널 설치 번들 실행합니다. 그런 다음 서버를 다시 시작합니다.

    이 보석은 당신의 gemfile에 있는지, 당신이 설치되어 보석 'protected_attributes'을 확인하고 터미널 설치 번들 실행합니다. 그런 다음 서버를 다시 시작합니다.

  4. from https://stackoverflow.com/questions/23437830/undefined-method-attr-accessible by cc-by-sa and MIT license