Приложение My Ruby on Rails использует Devise для аутентификации пользователей.Хотя у меня не было проблем с добавлением полей в форму регистрации по умолчанию, я новичок, и мне не повезло с переключателями.
Каждый :user
- это :teacher
или :student
(user
Таблица является самосоединением, фактически на этой основе).Таким образом, текущая рабочая регистрация требует, чтобы лицо, подписывающееся, печатало «студент» или «учитель» в текстовом поле «Должность».Естественно, это не удобно для пользователя, даже если оно функционально, поэтому я хотел бы заменить это текстовое поле двумя переключателями.
Что я пробовал:
В модели users.rb
Я добавил константу:
POSITIONS = [
["student", "Student"],
["teacher", "Teacher]
]
На devise/registrations/new.html.erb
Я изменил код поля на:
<div class="radio">
<%= f.label :position, 'Position', :class => 'position-button' %><br />
<div class="input-form">
<%= f.collection_radio_buttons(:position, @positions_collection, :first, :last) %>
</div>
</div>
И затем я перешел к контроллеру.Насколько мне известно, если бы Devise не был частью моего приложения, я бы вызвал константу POSITIONS
в users_controller.rb
таким образом:
def new
@user = User.new
@positions_collection = User::POSITIONS
end
Однако автоматически сгенерированный users_controller.rb
с Devise начинается сничего в def new
, но вместо этого, кажется, полагается на пользовательские методы в нижней части файла для обработки новых пользователей:
def resource_name
:user
end
def resource
@resource ||= User.new
end
def resource_class
User
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
Поэтому я начал экспериментировать, начав с простого добавления @positions_collection = User::POSITIONS
к def new
,Перезагрузка страницы регистрации вернула следующую ошибку: «NoMethodError в Devise :: Registrations # new [snip], где поднялась строка # 30: неопределенный метод 'map' для nil: NilClass".Эта ошибка возникает снова и снова, независимо от того, где я пытался вставить @positions_collection = User::POSITIONS
в контроллере, даже в пользовательских методах и даже пробовать его в сочетании с @user = User.new
.
(строка 30 относится кна <%= f.collection_radio_buttons(:position, @positions_collection, :first, :last) %>
в файле просмотра, который предполагает, что @positions_collection
является камнем преткновения, я бы поставил.)
У кого-нибудь есть мысли о том, как действовать?