【发布时间】:2011-04-27 12:59:58
【问题描述】:
最终解决方案:
我有一个使用 Devise 处理身份验证的 Rails 3 应用程序。在注册表单中,我有以下字段:
<p><%= f.label :first_name %><br />
<%= f.text_field :first_name %></p>
<p><%= f.label :last_name %><br />
<%= f.text_field :last_name %></p>
我需要将名字和姓氏大写,并在名为“登录”的数据库字段中的用户模型中将它们组合起来(例如姓氏、名字)。这是完整的用户模型:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :first_name, :last_name, :email, :password, :password_confirmation, :remember_me, :login
validates :first_name, :last_name, :email, :password, :password_confirmation, :presence => true
before_create :create_login
def create_login
self.login = "#{last_name.capitalize}, #{first_name.capitalize}"
end
end
谢谢。
【问题讨论】:
-
连接字符串的语法应该是:self.login = "#{last_name}, #{first_name}"
-
tks @a3uge 和 @JeffPaquette。我不断收到的错误是“nil:NilClass 的未定义方法‘大写’”
-
别忘了我们这些双姓氏。我的是伯恩-默多克而不是伯恩-默多克。这同样适用于 O'Leary、McDonald 等。
-
嘿,@Colin。如果有一个简单的解决方案,你能告诉我。在这一点上,我不能花时间写一个长的解决方案来解决这个问题。谢谢你的想法。我会做一个笔记,以便稍后在此应用程序的开发中回到这一点。
-
真的没有简单的解决方案。就我个人而言,我假设用户已经在案例中输入了他们应该写的名字,并且根本没有改变它们。我想捕获全小写的名称是合理的,然后对它们使用大写。这会将“mcdonald”变成“Mcdonald”,但不会影响“McDonald”。
标签: ruby-on-rails ruby-on-rails-3 model