2016-07-08 3 views
0

Построения простого телефонной книги приложения и есть беспокойство по поводу следующим:неопределенного метода `номер для ноля: NilClass

Каждого из моих перечисленных контактов имеет ряд ресурсов, а также их соотношение определяется в маршрутах файл, как следующим образом:

config/routes.rb 
resources :contacts do 
    resources :numbers 
    end 

в моем веб-приложение до сих пор, я его так, что пользователь может создать контакт, а затем создать соответствующий номер с данным контактом. Я список номеров для контакта, и когда пользователь нажимает на нее (для того, чтобы направить на шоу страницы номер # для конкретного числа, я получаю следующее сообщение об ошибке:

NoMethodError in NumbersController#show 
undefined method `numbers' for nil:NilClass 

Я имел эту ошибку много раз, и всегда это происходило, потому что контакт не был создан правильно, но в моем коде все сохраняется в db должным образом в соответствии с моим исследованием консоли rails. Ниже приведен код, вызывающий ошибку, найденный внутри моего номера контроллера :

def set_number #to do item 
     @number = @contact.numbers.find(params[:id]) 
    end 

И параметры, передаваемые в соответствии с страницей ошибки, являются следующим:

Parameters: 

{"contact_id"=>"1", 
"id"=>"1"} 

Я установил с помощью этого @ Контакт метода в контроллере чисел:

def set_contact 
     @contact = Contact.find(params[:contact_id]) 
end 

и я называю это в верхней части, как так:

before_action :set_contact 

Учитывая, что есть параметры, и Rails консоль сообщает мне, что и контакт, и номер были сохранены правильно, любая идея, что не так?

+0

вы можете на самом деле просто опубликовать весь контроллер номера, а также ссылку пользователь щелкает что воспитывающая ошибку? –

+1

У вас должно быть ваше 'before_action: set_contact' перед вашим' before_action: set_number', иначе у вас не будет '@ contact' при вызове': set_number' – dpedoneze

+0

'@number = Number.find (params [: id ]) 'достаточно, вам не нужно искать' @ contact', чтобы найти 'number' – lusketeer

ответ

1

Как я писал в качестве комментария:

Вы должны иметь свой before_action :set_contact перед вашим before_action :set_number, в противном случае вы не будете иметь @contact при вызове :set_number.

Все before_action работает в том порядке, что вы добавили их :)

Приветствия

1

Ошибка, указанная в методе set_number внутри вашего контроллера. И причина в том, что @contact - это нуль.

Таким образом, как и в комментариях выше, ваш метод set_contact может быть запущен после того, как set_number

Смежные вопросы