Почему параметры не читаются правильно? - PullRequest
1 голос
/ 23 декабря 2011

Когда я пытаюсь запустить это на одном из моих контроллеров:

goal = @user.goals.detect{|g| g.id == params[:id]}

цель устанавливается в ноль.Дело в том, что я запустил puts params[:id] перед этой строкой и вывел 112.Поэтому я подключил 112 к определению вместо params [: id], и оно работало нормально.Я не понимаю, почему params [: id] не читается как «112», что и дает результаты.Кто-нибудь может дать мне несколько советов?

Ответы [ 2 ]

3 голосов
/ 23 декабря 2011

Ваш params[:id] будет строкой, и вполне вероятно, что ваш g.id является целым числом. Хотя они оба будут печатать одинаково, они не равны:

>> "112" == 112
=> false
>> puts "112"
112
=> nil
>> puts 112
112
=> nil

Вам, вероятно, следует преобразовать ваш параметр в целое число перед его сравнением:

goal = @user.goals.detect{|g| g.id == params[:id].to_i}
2 голосов
/ 23 декабря 2011

Я думаю, params[:id] равно '112' (строка), а не 112 (целое число).

Попробуйте это:

goal = @user.goals.detect{|g| g.id == params[:id].to_i}
...