我想确保当有人创建帐户时,他们的名字和姓氏都会大写,以便他们的姓氏显示为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>
非常感谢任何帮助。我想我需要在不同的地方把这个名字大写。
答案 0 :(得分:2)
您可以在User
型号上添加方法:
# app/models/user.rb
def full_name
"#{first_name.capitalize} #{last_name.capitalize}"
end
这假设您的first_name
模型上有last_name
和User
个属性。
然后在您看来,您可以执行以下操作:
# 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