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
我该如何解决?
答案 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
每个单位应该对其他单位的知识有限:只有与当前单位“密切”相关的单位。
同时查看Rail Best Practices Law of Demeter;如果你没有其他任何东西,你将在if语句中保存自己的额外条款。你的代码看起来很漂亮。