设计:资本化名字

时间:2014-06-20 21:19:20

标签: ruby-on-rails devise

我在devise中添加了一个名为firstname的新字段,我希望它在注册时可以通过设计进行大写。

我第一次跑: rails generate migration add_username_to_users firstname:string

然后

rake db:migrate

之后我将firstname添加到application_controller.rb中的configure_permitted_parameters并更新了视图。我基本上使用了this但删除了一些不必要的东西。

我不知道我应该把代码用于大写firstname和lastname(以及其他一些验证)。任何指导将不胜感激。感谢。

5 个答案:

答案 0 :(得分:5)

我认为你应该在你的User模型中加上名字和姓氏的大写字母。每次保存用户时,您都可以将名字和姓氏大写。此外,所有验证(或属性预处理/清理)也可以在模型级别完成。

class User < ActiveRecord::Base
  before_save :capitalize_names

  def capitalize_names
    self.firstname = firstname.camelcase
    self.lastname = lastname.camelcase
  end
end

答案 1 :(得分:3)

<强> before_create

Joe Kennedy的回答是正确的 - 你应该使用before_create ActiveRecord回调

这里的不同之处在于,Devise并没有对您的实际数据建模做任何事情 - 它基本上只是创建了一系列控制器来处理用户registration&amp; login进程

-

如果您想确保User模型的某些属性以特定样式保存,您最好在模型中设置它:

#app/models/user.rb
Class User < ActiveRecord::Base
   before_create :set_firstname

   private

   def set_firstname
      self.firstname.titeize
   end
end

这应该允许您设置属性以使每个单词的首字母大写

-

<强>系统

另一种方法是查看您的系统

为什么你坚持以这种方式存储数据?为了造型,将所有数据保存在同一个数据中效率似乎非常低效。

我会使用CSS text-transform函数来执行此操作:

#app/assets/stylesheets/application.css
.first_name { text-transform: capitalize; }

#app/views/users/show.html.erb
<%= content_tag :span, @user.firstname, class: "first_name" %>

答案 2 :(得分:0)

最佳解决方案:

 class Role < ApplicationRecord
  before_save :capitalize_names
  def capitalize_names
    self.name.titlecase
  end
 end

输出将是:

'super admin'.titlecase
 Super Admin

答案 3 :(得分:-1)

这可能应该在用户控制器中(或者从Devise Controller继承并创建新用户的控制器)。在create方法中,在将用户保存到数据库之前,添加所需的任何属性(即将首字母大写),然后保存。

答案 4 :(得分:-1)

def create
  User.create(email: params[:email], first_name: params[:first_name].capitalize)
end

虽然我建议你只是在你的观点中输出大写,而不是在保存时。