NoMethodError для объекта - PullRequest
       2

NoMethodError для объекта

0 голосов
/ 25 октября 2011

Вот код

  #add email of team lead of the current user
  def add_the_tl_email(to_address, session_user_id)
    ul = UserLevel.find_by_user_id(session_user_id)
    if !ul.team.nil? && !ul.role.nil?
      User.user_status('active').joins(:user_levels).where(:user_levels => {:position => 'tl', 
                                                      :role => ul.role, 
                                                      :team => ul.team }).each do
        |u| to_address << u.email 
      end
    end
  end

Ошибка из спецификации:

  1) CustomersController GET customer page 'create' successful should create one customer record
     Failure/Error: post 'create', :customer => @customer
     NoMethodError:
       undefined method `team' for nil:NilClass
     # ./app/mailers/user_mailer.rb:36:in `add_the_tl_email'
     # ./app/mailers/user_mailer.rb:15:in `notify_tl_dh_ch_ceo'
     # ./app/controllers/customers_controller.rb:27:in `create'
     # ./spec/controllers/customers_controller_spec.rb:48:in `block (5 levels) in <top (required)>'
     # ./spec/controllers/customers_controller_spec.rb:47:in `block (4 levels) in <top (required)>'

Команда - это поле в user_level.Вот пользовательский уровень на фабрике:

Factory.define :user_level do |level|

  level.role                 "sales"
  level.position             "member"
  level.team                 1
  level.association          :user
end

В консоли рельсов ul.team.nil?возвращает либо true, либо false для тестовых данных, сгенерированных фабрикой.

Поскольку команда является полем в user_level, почему в спецификации есть ошибка, такая как: NoMethodError: неопределенный метод `team 'для nil: NilClass?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 25 октября 2011

Проблема в том, что nil.team не метод *

NoMethodError:
   undefined method `team' for nil:NilClass

То есть ul оценивается как nil: проверьте ul.nil? перед проверкой ul.team.nil? ... но, возможно, захотите выяснить, почему поиск не начинается с; -)

Удачного кодирования.


* Это то, что говорит реальное сообщение об ошибке , заголовок поста - мусор: - /

2 голосов
/ 25 октября 2011

Звонок в

 ul = UserLevel.find_by_user_id(session_user_id)

вернул nil и, таким образом, nil был присвоен ul.

Итак, когда вы позвонили

!ul.team.nil?

Руби попыталась позвонить team на nil. nil является экземпляром NilClass, и в NilClass.

нет метода с именем team.
...