#ruby-on-rails #devise
#ruby-on-rails #разработка
Вопрос:
Я добавил новое поле в devise с именем firstname, и я хочу, чтобы оно было заглавным в devise во время регистрации.
Сначала я запустил: rails generate migration add_username_to_users firstname:string
затем
rake db:migrate
После этого я добавил firstname configure_permitted_parameters
в application_controller.rb и обновил представления. Я в основном использовал это, но удалил некоторые ненужные вещи.
Я не знаю, где я должен поместить код для заглавных букв имени и фамилии (а также некоторые другие проверки). Любые рекомендации будут оценены. Спасибо.
Ответ №1:
Я думаю, вам следует указать заглавные буквы имени и фамилии в вашей User
модели. Каждый раз, когда пользователь сохраняется, вы можете использовать имя и фамилию с заглавной буквы. Кроме того, вся проверка (или предварительная обработка / очистка атрибутов) также может выполняться на уровне модели.
class User < ActiveRecord::Base
before_save :capitalize_names
def capitalize_names
self.firstname = firstname.camelcase
self.lastname = lastname.camelcase
end
end
Ответ №2:
before_create
Joe Kennedy
ответ правильный — вы должны использовать before_create
обратный вызов ActiveRecord
Разница здесь в том, что Devise ничего не делает с вашим фактическим моделированием данных — он в основном просто создает серию контроллеров для обработки пользователя registration
и login
процессов
—
Если вы хотите, чтобы определенные атрибуты вашей User
модели были сохранены в определенном стиле, вам лучше всего установить его в самой модели:
#app/models/user.rb
Class User < ActiveRecord::Base
before_create :set_firstname
private
def set_firstname
self.firstname.titeize
end
end
Это должно позволить вам установить атрибут так, чтобы первые буквы каждого слова были заглавными
—
Система
Альтернативой было бы взглянуть на вашу систему
Почему вы настаиваете на том, чтобы данные хранились таким образом? Кажется очень неэффективным сохранять все ваши данные в одном и том же виде ради стиля.
Я бы использовал text-transform
для этого функцию CSS:
#app/assets/stylesheets/application.css
.first_name { text-transform: capitalize; }
#app/views/users/show.html.erb
<%= content_tag :span, @user.firstname, class: "first_name" %>
Комментарии:
1. Зачем использовать before_create вместо before_save?
Ответ №3:
Лучшее решение когда-либо:
class Role < ApplicationRecord
before_save :capitalize_names
def capitalize_names
self.name.titlecase
end
end
Вывод будет:
'super admin'.titlecase
Super Admin
Ответ №4:
Вероятно, это должно быть в пользовательском контроллере (или в зависимости от того, какой контроллер наследуется от контроллера разработки и создает нового пользователя). В методе create, прежде чем сохранить пользователя в базе данных, добавьте к нему любые атрибуты, которые вы хотите (т. Е. С заглавной буквы), а затем сохраните его.
Ответ №5:
def create
User.create(email: params[:email], first_name: params[:first_name].capitalize)
end
Хотя я бы посоветовал вам просто выводить заглавные буквы в своих представлениях, а не при сохранении.
Комментарии:
1. Куда я должен это поместить? В application_controller?
2. Везде, где вы выводите имя пользователя.