我在devise中添加了一个名为firstname的新字段,我希望它在注册时可以通过设计进行大写。
我第一次跑:
rails generate migration add_username_to_users firstname:string
然后
rake db:migrate
之后我将firstname添加到application_controller.rb中的configure_permitted_parameters
并更新了视图。我基本上使用了this但删除了一些不必要的东西。
我不知道我应该把代码用于大写firstname和lastname(以及其他一些验证)。任何指导将不胜感激。感谢。
答案 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
虽然我建议你只是在你的观点中输出大写,而不是在保存时。