当我尝试在我的一个控制器中运行它时:
goal = @user.goals.detect{|g| g.id == params[:id]}
目标设定为零。问题是,我在此行之前运行puts params[:id]
并输出112
。所以我将112插入检测代替params [:id]并且它工作正常。我不明白为什么params [:id]没有被读作'112',这就是输出。谁能给我一些建议?
答案 0 :(得分: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}
答案 1 :(得分:2)
我猜params[:id]
等于'112'(字符串),而不是112(整数)。
试试这个:
goal = @user.goals.detect{|g| g.id == params[:id].to_i}