私はユーザがゲストUser
としてサインアップして私のサービスを試してみることができるRails 5アプリを持っています。各User
(およびゲストユーザ)は、多くの場合、App
を持つことができます。関係は次のようになります。Rails:dependent::destroyは再割り当て後でもレコードを削除します
# User.rb
has_many :apps, dependent: :destroy
# App.rb
belongs_to :user
私が欲しいときにゲストユーザがサービスにサインアップすることを決定する:
- (1)新しい現在のユーザーにゲストユーザのアプリ(複数可)を再割り当て。
- (2)古いゲストユーザーを削除します(アプリケーションを削除せずに)。
私がいる問題は、アプリが古いゲストユーザを削除する前に、私は(私はデバイスの宝石を使用して)私の新しいcurrent_user
へapp.user
を再割り当てしても削除されますということです。これが起こっているか、私が間違ってやっている理由について
# 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
任意のアイデア:私のclass Users::RegistrationsController < Devise::RegistrationsController
で
は、私はこのようなcreate
アクション(関連部分)をオーバーライド?
更新は
これは後に提出するなどの方法を私のuser_params
変数外観です:
<ActionController::Parameters {"name"=>"Test user", "email"=>"[email protected]", "password"=>"testing"} permitted: false>
をし、これがどのようにsign_up_params
外観です:私は前にアプリケーションを複製検討する
{"email"=>"[email protected]", "password"=>"testing", "name"=>"Test"}
あなたは 'guest_user'と' current_user'が同じでないことを確認していますか? – Aleksey
'sign_up_params'と' params [:user] 'を表示できますか? –
保存を使用すると!それはエラーを消す。感嘆符を削除してみてください。また、コードにブレークポイントを配置すると便利です。一度これを学ぶと、デバッグは一見ではありません。 –