2011-12-23 6 views
1

私は私のコントローラのいずれかでこれを実行しよう:なぜparamsが正しく読み込まれていないのですか?

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

目標はnilに設定されます。問題は、この行の前にputs params[:id]を実行して出力したことです。出力は112です。だから私はparams [:id]の代わりに112のプラグを検出して正常に動作しました。私はなぜparams [:id]が '112として読み込まれていないのか理解していません。これが出力を置きます。誰も私にいくつかの提案を与えることができますか?

答えて

3

あなた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} 
+0

ああ、理にかなって、それが動作します。答えとその例をありがとう! –

2

params[:id]は、112(整数)ではなく '112'(文字列)に等しいと思います。

はこれを試してみてください:

goal = @user.goals.detect{|g| g.id == params[:id].to_i} 
関連する問題