有条件地添加空格+字符串 - Rails 5

sle*_*n36 0 ruby activerecord ruby-on-rails

我编写了一个快速name模型方法,根据存在的字段返回用户名.

class User < ActiveRecord::Base
  validates :first_name,
    presence: true,
    length: {
      maximum: 64,
    }

  validates :last_name,
    length: {
      maximum: 64,
    }

  def name
    "#{self.first_name}#{" #{self.last_name}" if self.last_name.present?}"
  end
end
Run Code Online (Sandbox Code Playgroud)

如果仅first_name存在该字段,则应返回:

=> "Joe"
Run Code Online (Sandbox Code Playgroud)

如果两者first_namelast_name字段都存在,那么它应该返回:

=> "Joe Bloggs"
Run Code Online (Sandbox Code Playgroud)

上面的代码工作,但我觉得它可以清理很多.

这是一种更优雅的方式吗?

谢谢

Dee*_*ale 7

你可以利用squish.

它从字符串的两端删除所有空格,并将多个空格更改为一个空格.

def name
  "#{self.first_name} #{self.last_name}".squish
end
Run Code Online (Sandbox Code Playgroud)

此外,因为它是一个实例方法,您可以删除 self

def name
  "#{first_name} #{last_name}".squish
end
Run Code Online (Sandbox Code Playgroud)

例如.

" foo   bar ".squish
#=> "foo bar"
Run Code Online (Sandbox Code Playgroud)