gpt4 book ai didi

ruby-on-rails - 覆盖设计创建 Controller Action

转载 作者:行者123 更新时间:2023-12-01 05:26:02 28 4
gpt4 key购买 nike

我正在创建一个应用程序(用户有很多组),现有用户可以在其中发送邀请以邀请人们加入组。如果 sign_up url 有一个邀请 token ,我需要覆盖默认的设计 Controller 操作以进行创建。

路由文件

devise_for :users do 
match '/users/sign_out', :to => 'devise/sessions#destroy'
match '/users/sign_up/:invitation_token', :to => 'registrations#create'

registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
#after_filter :add_user_to_group

def new
super
end

def create
if !params[:invitation_token].nil?
token = params[:invitation_token]
@invitation = Invitation.where "token" => token
if !@invitation.nil?
build_resource
if resource.save
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_navigational_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_navigational_format?
expire_session_data_after_sign_in!
respond_with resource, :location => after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
respond_with resource
end
else
flash[:notice] = "Invalid Token. Cannot signup with this Link."
end
else
super
end
end

def after_sign_up_path_for(resource_or_scope)
@user = current_user
raise @user.inspect
@invitation = Invitation.where "recipient_email" => @user.email
if !@invitation.nil?
@user.update_attribute(:invitation_id, @invitation.id)
@user_group = UserGroup.new
@user_group.user_id = @user.id
@userGroup.group_id = @invitation.group_id
@userGroup.save!
end
after_sign_in_path_for(resource)
end

结尾

日志
Started GET "/users/sign_up/83003a4fab004ef4c1934c15f7215e8dc6a57718" for 127.0.0.1 at 2012-12-11 14:53:18
Processing by RegistrationsController#create as HTML
Parameters: {"invitation_token"=>"83003a4fab004ef4c1934c15f7215e8dc6a57718"}
SQL (0.1ms) BEGIN
User Exists (1.0ms) SELECT 1 AS one FROM `users` WHERE `users`.`name` IS NULL LIMIT 1
User Exists (0.1ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = '' LIMIT 1
(0.1ms) ROLLBACK

这会将我重定向到 sign_up 路径,但会在页面加载时执行验证。
Email can't be blank
Password can't be blank
Name can't be blank

sign_up 后记录与较早呈现的页面
Started POST "/users" for 127.0.0.1 at 2012-12-11 14:56:37 +0530
Processing by Devise::RegistrationsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"gUmNDb1Sj/ZVnXMG8t/Av0QlAYg7nAMTsSU5ZBW+s60=", "user"=>{"name"=>"Prashanth2", "email"=>"sample@sampleee.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}
SQL (0.1ms) BEGIN
User Exists (0.4ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = BINARY 'sample@sampleee.com' LIMIT 1
User Exists (0.3ms) SELECT 1 AS one FROM `users` WHERE `users`.`name` = 'Prashanth2' LIMIT 1
User Exists (0.2ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = 'sample@sampleee.com' LIMIT 1
SQL (1.1ms) INSERT INTO `users` (`created_at`, `current_sign_in_at`, `current_sign_in_ip`, `email`, `encrypted_password`, `invitation_id`, `invitation_limit`, `last_sign_in_at`, `last_sign_in_ip`, `name`, `remember_created_at`, `reset_password_sent_at`, `reset_password_token`, `sign_in_count`, `updated_at`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [["created_at", Tue, 11 Dec 2012 09:26:37 UTC +00:00], ["current_sign_in_at", nil], ["current_sign_in_ip", nil], ["email", "sample@sampleee.com"], ["encrypted_password", "$2a$10$jcaLbYWNqp2sbUlAZWb38.Ls7Ku90ImOQ11k0fxJSq/mD4Zm2U1JO"], ["invitation_id", nil], ["invitation_limit", 5], ["last_sign_in_at", nil], ["last_sign_in_ip", nil], ["name", "Prashanth2"], ["remember_created_at", nil], ["reset_password_sent_at", nil], ["reset_password_token", nil], ["sign_in_count", 0], ["updated_at", Tue, 11 Dec 2012 09:26:37 UTC +00:00]]
(108.5ms) COMMIT
SQL (0.1ms) BEGIN
(0.3ms) UPDATE `users` SET `last_sign_in_at` = '2012-12-11 09:26:38', `current_sign_in_at` = '2012-12-11 09:26:38', `last_sign_in_ip` = '127.0.0.1', `current_sign_in_ip` = '127.0.0.1', `sign_in_count` = 1, `updated_at` = '2012-12-11 09:26:38' WHERE `users`.`id` = 12
(127.8ms) COMMIT

最佳答案

我不得不做类似的事情。我最终添加了用于将 token 添加到用户模型的代码,并有一个单独的 Controller 操作来接受邀请:

用户名

after_create :accept_invitation, if: :token

private
def accept_invitation
# Or whatever you need to add the invitation token.
permission = Permission.find_by_token(token)
if permission
permission.update_attributes!(user_id: id, accepted: true)
UserMailer.admin_accepted_invitation_email(permission).deliver
end
end

registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
layout "home"

def accept_invitation
@invitation = Permission.find_by_token!(params[:token])
@user = User.new(token: @invitation.token)
end
end

关于ruby-on-rails - 覆盖设计创建 Controller Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13817243/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com