如何用nil设置“If”语句?

时间:2013-02-21 21:58:35

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

country属性的默认值为nil。

在国家/地区表格中,某些记录为image_url,其余记录的country属性均为零。

所以我用帮助器编码了这个

def image(user)
    if user.country.image_url
        image_tag "flags/#{user.country.image_url}.png" 
    end
end

但是,当image_url为零

时,它会返回错误
Something went wrong

我该如何解决?

2 个答案:

答案 0 :(得分:3)

您需要两个条件:用户必须拥有一个国家/地区,并且该国家/地区必须拥有image_url。只有这样才能展现出一些东西。幸运的是,这是一个简单的调整:

def image(user)
    if(user.country && user.country.image_url)
        image_tag "flags/#{user.country.image_url}.png" 
    end
end

如果你是偏执狂,你应该确保user不是nil

希望有所帮助!

答案 1 :(得分:3)

虽然类似链接的方法确实有效,但如果实现某些方法委派,您的代码看起来会更清晰,并且变得更少耦合。

您的用户模型内部:

class User < ActiveRecord::Base

     belongs_to :country

     delegate :image_url, :to => :country, :prefix => true, :allow_nil => true       

end

现在你的助手变得简单了:

def image(user)
    if user.country_image_url
        image_tag "flags/#{user.country_image_url}.png" 
    end
end

Law of Demeter州:

  

每个单位应该对其他单位的知识有限:只有与当前单位“密切”相关的单位。

同时查看Rail Best Practices Law of Demeter;如果你没有其他任何东西,你将在if语句中保存自己的额外条款。你的代码看起来很漂亮。