2015-02-12 2 views
0

Новый для рельсов и немного смущен.Rails метод поиска подвесной

У меня есть следующее условие:

if Agency.find(params[:agency]).id 
    @parent = Agency.find(params[:agency]).id 
end 

Он висит на первой строке и возвращает ошибку, «Не удалось найти агентство без ID» .. который моя точка для начала. ..

Если он не может найти агентство, то он ничего не должен делать (по крайней мере, это было моим намерением). В противном случае установите экземпляр @parent.

Каков правильный синтаксис для проверки того, может ли он найти его (агентство), чтобы быть с ним?

EDIT:

Поиск в документации я понял это,

«Метод находкой вызывает исключение ActiveRecord :: RecordNotFound, если только соответствующая запись найдена для всех входящих в комплект поставки первичных ключей. "

+1

показать значение 'Params [: агентства]'? –

+0

Awesome .. это сработало .. если вы хотите ответить, я отдам кредит. – captainrad

+0

Я не знаю, как я помог .. :-) Но у тебя что-то не так, как ты сделал, вот и все. –

ответ

1

Если вы хотите установить переменную @parent, если запись существует агентство, проверьте его существования первой с exists?

if Agency.exists?(params[:agency]) 
    @parent = Agency.find(params[:agency]).id 
end 
0

Чтобы уточнить, метод find требует идентификатора в качестве параметра. Если в вашей модели агентства имеется столбец, называемый агентством, вы можете использовать find_by, например. Agency.find_by(agency: params[:agency]).id

0

Благодаря документам и @aruprakshit, я понял, почему я не проверял это правильно, чтобы начать.

Состояние документов, «Метод find будет вызывать исключение ActiveRecord :: RecordNotFound, если не найдена соответствующая запись для всех поставляемых первичных ключей».http://guides.rubyonrails.org/active_record_querying.html

Я не пробовал просто смотреть на params[:agency], как было предложено посмотреть, действительно ли оно существовало. После того, как мой код изменил код:

if Agency.exists?(params[:agency]) 
    @parent = Agency.find(params[:agency]).id 
end 

Он работал как шарм.

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