У меня есть приложение Rails 4 с использованием Devise для аутентификации - и в настоящее время он работает.Rails 4: как получить доступ к содержимому Devise Registrations Controller
Я теперь следую за этим учебным курсом coderwall о Creating a Scoped Invitation System for Rails.
В недавно приглашенного регистрации пользователя раздел , автор рекомендует udpate в RegistrationsController
, следующим образом:
def new
@token = params[:invite_token] #<-- pulls the value from the url query string
end
def create
@newUser = build_user(user_params)
@newUser.save
@token = params[:invite_token]
if @token != nil
org = Invite.find_by_token(@token).user_group #find the user group attached to the invite
@newUser.user_groups.push(org) #add this user to the new user group as a member
else
# do normal registration things #
end
end
Есть много вопросов и ответов, на переполнение стека, а также accross Интернет, объясняя, как переопределить Завещание RegistrationsControllers
, в том числе:
- Override devise registrations controller
- How to override devise registrations controller
- How to Override and Customize the Devise Controller in Rails
Итак, я понимаю, что создание MyDevise::RegistrationController
что унаследует от Devise::RegistrationsController
и вызова команды super
в начале действия, которые я хочу изменить будет держать первоначальные функции этих действий.
я мог бы сделать что-то вроде:
def new
super
@token = params[:invite_token] #<-- pulls the value from the url query string
end
def create
@newUser = build_user(user_params)
@newUser.save
@token = params[:invite_token]
if @token != nil
org = Invite.find_by_token(@token).user_group #find the user group attached to the invite
@newUser.user_groups.push(org) #add this user to the new user group as a member
else
super
end
end
Меня беспокоит лишь то, что я не устраивает переопределение контроллер и его действия, не зная исходное содержание этого контроллера и эти действия.
-----
UPDATE: Я знаю, что мы можем получить доступ к Devise::RegistrationsController
из Devise GitHub repository, но я не уверен, что у меня это все та же. Это может быть, например, было изменено, когда я реализовал свою систему аутентификации.
-----
UPDATE 2: если я использую код из Devise::RegistrationsController
упоминания в моем первом обновлении, я могу придумать следующий код для моего нового RegistrationsController
:
def new
@token = params[:invite_token] #<-- pulls the value from the url query string
build_resource({})
set_minimum_password_length
yield resource if block_given?
respond_with self.resource
end
def create
build_resource(sign_up_params)
resource.save
@token = params[:invite_token]
if @token != nil
org = Invite.find_by_token(@token).calendar #find the calendar attached to the invite
resource.calendars.push(org) #add this user to the new calendar as a member
else
yield resource if block_given?
if resource.persisted?
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_flashing_format?
sign_up(resource_name, resource)
respond_with resource, location: after_sign_up_path_for(resource)
else
set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format?
expire_data_after_sign_in!
respond_with resource, location: after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
set_minimum_password_length
respond_with resource
end
end
end
Это имеет смысл вообще?
-----
Итак, есть ли способ, чтобы вытащить содержание моего текущего Devise::RegistrationsController
где-то в приложении?
Если нет, делает ли смысл код, который я рассматриваю при реализации?
Какое действие 'create'? –
Нет проблем. Я попробовал код из UPDATE 2 и, похоже, работает до сих пор. –
Да, я не видел update2, поэтому теперь мне было лучше для меня – Antoine