Разработка: имя с заглавной буквы

#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. Везде, где вы выводите имя пользователя.