【问题标题】:Ruby and Rails Simple Question on ExpressionRuby 和 Rails 关于表达式的简单问题
【发布时间】:2011-03-23 07:50:33
【问题描述】:

嘿,如果对象没有值,是否有一个快速的 Ruby(或 Rails)表达式返回 nil ?

例如,如果 self.name 在数据库中为空,它应该返回 nil。如果它是一个字符串,它应该返回它。我在考虑除非,但也许有更好的方法。

另外,如果你有一个像 get_profession(type) 这样的函数,并且 type 可以是“first”、“second”或“third”,那么查询 self.first 或 self.second 或 self 的优雅方式是什么。第三(根据类型参数)并返回nil,除非self.first(或其他类型)有字符串值?

如您所见,第二个问题与第一个问题密切相关。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    在 Ruby 中,如果一个变量没有值,则默认为nil。要回答您的第二个问题,您可以使用send 方法来调用您的“类型”方法。类似的,

    def get_profession(type)
      # Making sure correct type is passed.
      raise RuntimeError unless ['first', 'second', 'third'].include?(type.to_s)
      send(type)
    end
    

    Send 期望字符串中的方法作为参数,它在同一个对象上调用该方法。在您的情况下,如果您的“类型”方法的响应没有值,则默认为nil

    【讨论】:

    • 顺便说一句,在一个不相关的主题上,我们不会在获取 ruby​​ 内容的方法调用之前添加“get_”。它是隐含的。您应该将方法命名为 profession,而不是 get_profession
    • 是的。公约。这可能会帮助您治愈 PHPitis ;) - softiesonrails.com/2007/10/18/ruby-101-naming-conventions
    • 只是松散相关,但由于您正在阅读文档以尝试治疗 PHPitis,因此请确保您也检查了 blank? 方法(Rails 随附)。如果属性为 nil 为空字符串,则返回 true。
    • 或一个只有空格的字符串:)
    【解决方案2】:

    如果没有值,它实际上返回 nil。你真的试过了吗?如果一个对象没有任何值,它应该返回 nil

    需要补充的是,你的属性应该在数据库中有一个对应的列名。否则它将是一个未定义的方法调用。

    例如

    Company.name

    如果您没有名称列,它将显示未定义的方法名称。

    如果您打算像这样显示字段,则只检查字段是常见且简洁的:

     <%= @person.profession if @person.profession %>
    

    反之亦然

     <%= @person.profession unless @person.profession.nil? %>
    

    【讨论】:

    • 嗯,听起来确实合乎逻辑。你认为我应该依靠那个 nil 数据库值来确定某人是否有这种类型的职业吗?
    • 我在寻找最佳实践,这就是为什么我问你将如何去做
    • 取决于您希望如何显示它。捕捉 nil 值当然是可以的,因为你总会得到一个值(即使它是 nil)。像 Person.profession.nil 之类的东西? //他没有职业 else display Person.profession
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 2011-05-13
    相关资源
    最近更新 更多