Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 有没有一种更像rubylike的方法来实现这个helper函数_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 有没有一种更像rubylike的方法来实现这个helper函数

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 编写测试并检查正确和错误返回案例 将上面的代码缩

基本上,我想返回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工作位置(应用程序) application.contact.work\u location.blank?拯救真实 结束
  • 编写测试并检查正确和错误返回案例
  • 将上面的代码缩短为:
  • def工作位置(应用程序) application.contact.work\u location.blank?拯救真实 结束 就我个人而言,我不喜欢通过执行
    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? %>