【发布时间】:2016-06-24 21:30:42
【问题描述】:
我有一个 Rails 5 应用程序,用户可以在其中注册为访客 Users 以试用我的服务。每个User(和来宾用户)可以有多个Apps。关系如下所示:
# User.rb
has_many :apps, dependent: :destroy
# App.rb
belongs_to :user
当访客用户决定注册我想要的服务时:
- (1) 将访客用户的应用程序重新分配给新的当前用户。
- (2) 删除旧访客用户(不删除应用)。
我遇到的问题是,即使我在删除旧来宾用户之前将 app.user 重新分配给我的新 current_user(我使用设备 gem),该应用也会被删除。
在我的class Users::RegistrationsController < Devise::RegistrationsController 中,我像这样覆盖create 操作(相关部分):
# POST /resource
def create
user_params = params[:user]
new_user_from_guest = guest_user
build_resource(sign_up_params)
resource.save
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)
# Reassigns the app
reasign_app_for_user(new_user_from_guest)
Mailer.deliver_welcome_message(current_user).deliver_later!
respond_with resource, location: after_sign_up_path_for(resource)
# delete the guest user (this also deletes the app)
delete_guest_user!
else
[...]
end
else
[...]
end
end
# ... my private methods for deleting the current user and reassigning the app's owner.
def reasign_app_for_user(user)
user.apps.each do |app|
app.user = current_user
app.save!
end
end
# ... this method deletes the app, even if it is called after the reassign method.
def delete_guest_user!
guest_user(with_retry = false).try(:destroy)
session[:guest_user_id] = nil
end
关于为什么会发生这种情况或我做错了什么的任何想法?
更新
这是我的user_params 变量在提交后的样子:
<ActionController::Parameters {"name"=>"Test user", "email"=>"test@example.com", "password"=>"testing"} permitted: false>
这就是sign_up_params 的样子:
{"email"=>"test@example.com", "password"=>"testing", "name"=>"Test"}
【问题讨论】:
-
你确定
guest_user和current_user不一样吗? -
你能告诉我们
sign_up_params和params[:user]吗? -
当你使用保存时!这可以消除错误。尝试删除感叹号。在代码中放置断点也很有帮助。一旦你学会了调试,就永远不会出现这种情况。
-
@Aleksey 是的,它们不一样。
-
@SergiiK 我已将其添加到我原来的问题中。
标签: ruby-on-rails ruby devise belongs-to ruby-on-rails-5