名称未在显示页面上显示capitalalize字母

时间:2015-09-25 03:59:00

标签: ruby-on-rails ruby

我想确保当有人创建帐户时,他们的名字和姓氏都会大写,以便他们的姓氏显示为Bob vs bob。我一直在用户控制器中使用以下内容。

.split.map(&:capitalize).join(' ')
.capitalize
.titleize

binding.pry中,使用capitalize方法后,它会被大写。但是,当信息显示在节目页面上时,它是小写的。

这是我控制器中的代码:

full_name_upcase =
@ambassador.first_name.split.map(&:capitalize).join(' ') + ' ' +
@ambassador.last_name.split.map(&:capitalize).join(' ')
@ambassador.full_name = full_name_upcase

这是我在节目页面上的电话:

<h3><%= ambassador.full_name %></h3>

非常感谢任何帮助。我想我需要在不同的地方把这个名字大写。

5 个答案:

答案 0 :(得分:2)

您可以在User型号上添加方法:

# app/models/user.rb  
def full_name
  "#{first_name.capitalize} #{last_name.capitalize}"
end

这假设您的first_name模型上有last_nameUser个属性。

然后在您看来,您可以执行以下操作:

# app/views/users/show.html.erb
<h3><%= @ambassador.full_name %></h3>

该模型是此类方法的最佳选择。

答案 1 :(得分:1)

除非您想在数据库中存储大写的名称(在这种情况下应用@pangpang的评论),并记住@ mudasobwa的观点。我更愿意这样做:

在您的User模型中:

class User < ActiveRecord::Base    
  def full_name
    read_attribute(:full_name) && read_attribute(:full_name).split.map(&:capitalize).join(' ')
  end
end

这不会覆盖数据库中的值,而且还会为您提供大写格式,而无需创建任何不同的instance_variable /方法来访问它。

答案 2 :(得分:0)

除非您想在数据库中存储大写的名称(在这种情况下应用@pangpang的注释),您应该引入另一个实例变量:

@full_name_upcase = @ambassador........

以后在视图中:

<h3><%= @full_name_upcase %></h3>

正在将实例变量传递给视图。

但最好的选择是为此引入辅助方法:

def capitalized
  full_name.split.map(&:capitalize).join(' ')
end

并在视图中:

<h3><%= @ambassador.capitalize %></h3>

答案 3 :(得分:0)

如果您不希望将持久属性(full_name)添加到数据库,则应在视图中使用@ambassador

<h3><%= @ambassador.full_name %></h3>

或者您必须保存更改:

full_name_upcase =
@ambassador.first_name.split.map(&:capitalize).join(' ') + ' ' +
@ambassador.last_name.split.map(&:capitalize).join(' ')
@ambassador.full_name = full_name_upcase
@ambassador.save

答案 4 :(得分:0)

为什么没有人想出在数据库中包含好数据的想法?

class User
  before_validation {
    self.firstname.capitalize!
    self.lastname.capitalize!
  }

  validate :capital_names

  def full_name
    "#{firstname} #{lastname}"
  end

  private

    def capital_names
      #should never throw!
      errors.add :firstname, "needs to be capitalized" if firstname != firstname.capitalize
      errors.add :lastname, "needs to be capitalized" if lastname != lastname.capitalize
    end
end