Ruby on rails 有没有一种更像rubylike的方法来实现这个helper函数
基本上,我想返回true或false…我只想在work_位置不是空的情况下返回true,并且我需要捕获nil错误 实际上,这会产生一个语法错误Ruby on rails 有没有一种更像rubylike的方法来实现这个helper函数,ruby-on-rails,ruby,Ruby On Rails,Ruby,基本上,我想返回true或false…我只想在work_位置不是空的情况下返回true,并且我需要捕获nil错误 实际上,这会产生一个语法错误 def work_location(application) if application.contact.work_location.blank? rescue nil return false else return true end return false end 编写测试并检查正确和错误返回案例 将上面的代码缩
def work_location(application)
if application.contact.work_location.blank? rescue nil
return false
else
return true
end
return false
end
rescue false
来处理潜在的NIL,因为您捕获的远远多于NIL:这样的rescue可以拯救所有其他类型的错误,例如,它将捕获NoMethodError
,因此如果您键入其中一个方法名称,它将挤压该错误并使跟踪变得更加困难
就我个人而言,我不喜欢通过执行
rescue false
来处理潜在的NIL,因为您捕获的远远多于NIL:这样的rescue可以拯救各种其他错误,例如它将捕获NoMethodError
,因此,如果您键入了其中一个方法名,它将消除该错误并使跟踪变得更加困难。据我所知,您正在这里创建一个helper方法。
我应该在应用程序上定义一个方法,然后您可以在视图中使用它
优点:它是纯面向对象的。应用程序应该知道它是否有工作场所
第二,使用:如果接收方不是nil,它将只尝试给定的方法或块,否则它将返回nil
因此:
请注意,try
的这种用法仅适用于rails 3.2,如果您使用的是旧版本,则它不接受块。此外,nil.present?
工作并返回falso,因此您可以编写
class Application
def has_work_location?
self.contact.try { |c| c.work_location.present? }
end
end
注意:因为我们正在向应用程序添加一个方法,所以我们可以安全地假设应用程序
,所以我们只需要检查联系人
是否存在
在您的视图中,您可以只写:
def has_work_location?
self.contact.try(:work_location).present?
end
或者类似的东西。希望这有帮助。据我所知,您正在这里创建一个帮助器方法。 我应该在应用程序上定义一个方法,然后您可以在视图中使用它 优点:它是纯面向对象的。应用程序应该知道它是否有工作场所 第二,使用:如果接收方不是nil,它将只尝试给定的方法或块,否则它将返回nil 因此: 请注意,
try
的这种用法仅适用于rails 3.2,如果您使用的是旧版本,则它不接受块。此外,nil.present?
工作并返回falso,因此您可以编写
class Application
def has_work_location?
self.contact.try { |c| c.work_location.present? }
end
end
注意:因为我们正在向应用程序添加一个方法,所以我们可以安全地假设应用程序
,所以我们只需要检查联系人
是否存在
在您的视图中,您可以只写:
def has_work_location?
self.contact.try(:work_location).present?
end
或者类似的东西。希望这有帮助。为什么不在测试中介绍这种方法呢?这就不那么偏执了,它看起来很短,主要是什么?它让你清楚地了解这个方法中发生了什么。如果这个方法只是返回true,而不是提高nomethorror,那么你可能会花更长的时间试图弄清楚为什么你的测试会失败。或者,如果您误用了该方法(例如在没有联系人方法的情况下调用它),我宁愿抛出一个异常,也不愿它默默地返回false。就我个人而言,我喜欢偏执狂。但我知道有些人喜欢这样使用救援,我只是碰巧不知道为什么不用测试来覆盖这种方法?这就不那么偏执了,它看起来很短,主要是什么?它让你清楚地了解这个方法中发生了什么。如果这个方法只是返回true,而不是提高nomethorror,那么你可能会花更长的时间试图弄清楚为什么你的测试会失败。或者,如果您误用了该方法(例如在没有联系人方法的情况下调用它),我宁愿抛出一个异常,也不愿它默默地返回false。就我个人而言,我喜欢偏执狂。但我知道有些人喜欢这样使用救援,我只是碰巧没有让名字
work\u location?
或者甚至work\u location\u存在?
使用问号以便理解它会返回一个布尔值。我会让名字work\u location?
或者work\u location\u存在?
使用问号以便理解它会返回一个布尔值布尔值。实际上,在我读到它时,OP只想在工作位置不为空时返回true。实际上,在我读到它时,OP只想在工作位置不为空时返回true。
def has_work_location?
self.contact.try(:work_location).present?
end
<%= @application.contact.workplace if @application.has_work_place? %>