Ruby和Rails关于表达式的简单问题

时间:2011-03-23 07:50:33

标签: ruby-on-rails ruby

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

例如,如果self.name在数据库中为null,则应返回nil。如果它是一个字符串,它应该返回它。我想的除非,但也许有更好的东西。

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

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

2 个答案:

答案 0 :(得分:2)

在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

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

答案 1 :(得分:1)

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

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

e.g。

Company.name< - 如果公司表中有名称列但没有值

,则应返回nil

如果您没有名称列,则会说未定义的方法名称。

如果您打算如此显示字段,那么检查字段是常见且更简洁的:

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

或其他方式

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