仅在填充哈希时调用方法

时间:2012-06-08 03:20:28

标签: ruby-on-rails ruby ruby-on-rails-3 hash conditional

我有一个名为

的实例变量
@filtered_ratings = params[:ratings].keys 

但是,如果params[:ratings]为nil并且在其上调用#keys,则会引发错误。如果@filtered_ratings为nil,我希望将@filtered_ratings设置为空数组(或散列)。没有太多代码,有没有一种简单的方法可以做到这一点?谢谢!

3 个答案:

答案 0 :(得分:2)

@filtered_ratings = params[:ratings].keys if params[:ratings].respond_to? :keys

修改

 # if params[:ratings] is nil then return []
 @filtered_ratings = params[:ratings].try(:keys) || []

答案 1 :(得分:1)

试试这个:

@filtered_ratings = params[:ratings].try(:keys)

如果params[:ratings]nil,它也会返回nil(而非提出错误)。

此外,您当然可以在空哈希(#keys)上调用{}。但nil不是一个。

答案 2 :(得分:1)

我使用andand gem,因为我已经习惯了:

@filtered_ratings = params[:ratings].andand.key

这会将@filtered_ratings设置为nil或键值 - 可能是你想要的也可能不是。