Функция определена, но на самом деле не используется - PullRequest
1 голос
/ 13 февраля 2012

Это user.rb:

# == Schema Information
#
# Table name: users
#
#  id         :integer         not null, primary key
#  name       :string(255)
#  email      :string(255)
#  created_at :datetime        not null
#  updated_at :datetime        not null

class User < ActiveRecord::Base      
  attr_accessible :name, :email, :password, :password_confirmation, :remember_token
  has_secure_password
  before_save :create_remember_token

  validates :name, presence: true, :length => { maximum: 50 }
  valid_email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, :presence   => true,
                    :format     => { with: valid_email_regex },
                    :uniqueness => { case_sensitive: false }

  validates :password,  length: { minimum: 6}

  private

    def create_remember_token
      self.remember_token = SecureRandom.urlsafe_base64
    end
end

Я определил функцию create_remember_token, но заметил, что в этом файле я не могу вызвать ее.В консоли Rails это тоже не сработало:

1.9.2-p290 :002 > User.first.create_remember_token
  User Load (0.4ms)  SELECT "users".* FROM "users" LIMIT 1
NoMethodError: private method `create_remember_token' called for #<User:0x0000010289cda0>
    from /Users/luke/.rvm/gems/ruby-1.9.2-p290/gems/activemodel-3.2.0/lib/active_model/attribute_methods.rb:404:in `method_missing'
    from /Users/luke/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.2.0/lib/active_record/attribute_methods.rb:129:in `method_missing'
    from (irb):2
    from /Users/luke/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.2.0/lib/rails/commands/console.rb:47:in `start'
    from /Users/luke/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.2.0/lib/rails/commands/console.rb:8:in `start'
    from /Users/luke/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.2.0/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>

Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 13 февраля 2012

Обратите внимание на ошибку, которую вы получаете: NoMethodError: private method. Переместите метод выше private и вы сможете получить к нему доступ.

0 голосов
/ 10 июня 2013

Если ваша проблема вызывает этот метод в консоли, то да, удаление его из частного решит проблему.Но я думаю, вы определенно хотите сохранить этот метод закрытымЕсть ли какая-то другая основная проблема?Неудачный тест?Метод должен работать как написано.

0 голосов
/ 13 февраля 2012

Вы можете вызывать закрытые методы только в самом классе, а не извне класса.Переместите ваш метод выше private:

def create_remember_token
  self.remember_token = SecureRandom.urlsafe_base64
end

private

# Your private methods here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...