【问题标题】:ruby one-liner for this possible?ruby one-liner 这可能吗?
【发布时间】:2010-06-04 02:33:45
【问题描述】:

第 2 行和第 3 行有没有可能合并成一条线,希望能节省一个有价值的东西?

def self.date_format
  record = find_by_key('strftime')
  record ? record.value : "%Y-%b-%d'
end

Config 模型中的上述函数尝试通过键获取数据库记录,如果在数据库中找不到则返回默认值。

如果可以写在命名范围内就更好了。谢谢

【问题讨论】:

    标签: ruby named-scope activemodel


    【解决方案1】:

    根据要求。

    还没有人提到try,它非常适合这种情况:

    value = find_by_key('strftime').try(:value) || "%Y-%b-%d"

    【讨论】:

    • 虽然 try 没有在 ruby​​ 中定义,所以你必须添加 require 'active-support'
    • 问题被标记为named-scopeactivemodel 所以假设。
    【解决方案2】:

    你可以使用:

    (find_by_key('strftime').value rescue nil) || "%Y-%b-%d"
    

    虽然使用异常不是很有效。

    【讨论】:

      【解决方案3】:

      value = find_by_key('strftime') || "%Y-%b-%d"
      

      为你工作?

      【讨论】:

      • 对不起,返回应该是reocrd.value,不记录
      • 它缺少.value 调用,但您可以将其更改为find_by_key('strftime').try(:value) || "%Y-%b-%d" 以轻松保持一行。
      • @x1a4,你能把它放在答案中吗?这样我就可以相信你
      【解决方案4】:

      您是否需要分配一个“值”变量?如果没有……

      def self.date_format
        find_by_key('strftime') || "%Y-%b-%d"
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-30
        • 2014-07-13
        • 2016-04-22
        • 2014-03-19
        • 2011-07-14
        • 2019-12-07
        • 2014-07-31
        相关资源
        最近更新 更多