def work_location(application)
if application.contact.work_location.blank? rescue nil
return false
else
return true
end
return false
end
基本上我想返回true或false ....如果work_location不为空,我只想返回true并且我需要捕获nil错误
实际上会产生语法错误
syntax error, unexpected modifier_rescue, expecting keyword_then or ';' or '\n'
..._location.blank? rescue nil
答案 0 :(得分:3)
def work_location(application)
application.try(:contact).try(:work_location).present?
end
我个人不喜欢通过rescue false
处理潜在的nils,因为你捕获的内容远远超过nils:这样的救援会拯救各种其他错误,例如它会捕获NoMethodError
,所以如果你键入其中一个方法名称,它会压缩该错误并使其更难以追踪。
答案 1 :(得分:0)
def work_location(application) application.contact.work_location.blank? rescue true end
答案 2 :(得分:0)
据我所知,你在这里创建一个帮助方法。 我应该在应用程序上定义一个方法,然后您可以在视图中使用它。
优点:它纯粹是面向对象的。申请人应该知道它是否有工作场所。
其次,使用try:如果接收者不是nil,它只会尝试给定的方法或块,否则返回nil。
所以:
class Application
def has_work_location?
self.contact.try { |c| c.work_location.present? }
end
end
请注意,try
的这种用法仅适用于rails 3.2,如果您使用的是旧版本,则它不接受块。此外nil.present?
可以工作并返回falso,因此您可以编写
def has_work_location?
self.contact.try(:work_location).present?
end
注意:因为我们正在向应用程序添加方法,所以我们可以安全地假设application
,因此我们只需检查contact
是否已存在。
在您的观点中,您可以写下:
<%= @application.contact.workplace if @application.has_work_place? %>
或类似的东西。希望这会有所帮助。