为什么没有正确读取参数?

时间:2011-12-23 17:13:10

标签: ruby detect params

当我尝试在我的一个控制器中运行它时:

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

目标设定为零。问题是,我在此行之前运行puts params[:id]并输出112。所以我将112插入检测代替params [:id]并且它工作正常。我不明白为什么params [:id]没有被读作'112',这就是输出。谁能给我一些建议?

2 个答案:

答案 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}