如果Rails中的对象是nil,我如何跳过一段代码?

时间:2011-07-11 16:50:57

标签: ruby ruby-on-rails-3 controller

我有一段代码可以在单击相应的复选框时启用或禁用选择列表,但如果它们在帖子上全部禁用,则不会在params列表中发送这些代码。所以我只有在存在时才需要执行代码。

我用过:

if params[:id][:id2].nil?

if params[:id][:id2].blank?

if params[:id][:id2].empty?

简单地说:

if params[:id][:id2]

所有人都会犯同样的错误......“你有一个零对象,你没有想到它。”我该如何解决这个错误?

2 个答案:

答案 0 :(得分:7)

可能params[:id]为零,请检查params[:id].nil?

编辑:以下评论指出,如果您要对blank?nil?进行评估,empty?会更好。

答案 1 :(得分:0)

同时

class Object
  def unless_nil(default = nil, &block)
    if nil?
      default
    else
      block[self]
    end
  end
end

允许以下内容:

id2 = params[:id].unless_nil { |p_id| p_id[:id2] }
id2, id3 = params[:id].unless_nil([0, 0]) { |p_id| [p_id[:id2], p_id[:id3]] }