Ваш 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}