0

ユーザーとプロファイルを別々のモデルにしています。ユーザーが削除されると、リンクされたプロファイルが残ります。これは望ましい結果です。私がやりたいことは、プロファイル レコードに削除済みのフラグを付けることです。

削除された列 (ブール値) をプロファイル テーブルに追加しましたが、そのセットを true セットに追加して、devise destroy メソッドに追加する方法がわかりません。

app\controller\registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController
   def destroy
     delete_profile(params) 
   end


   private

   def delete_profile(params)
     profile = Profile.find(params[:id])
     profile.deleted = true
   end  
end

しかし、私はこのエラーを回避する方法を理解することができます

Couldn't find Profile without an ID

ビューで削除ユーザーから正しいパラメーターを渡すにはどうすればよいですか?

4

1 に答える 1

1

Devise はparams[:id]現在のユーザーを破棄するために を使用せず (したがって、ルートを通じて提供されません)、代わりに を使用しcurrent_userます。

コントローラーの関連部分は次のとおりです。

class Devise::RegistrationsController < DeviseController
  prepend_before_filter :authenticate_scope!, :only => [:edit, :update, :destroy]

  def destroy
    resource.destroy
    Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)
    set_flash_message :notice, :destroyed if is_navigational_format?
    respond_with_navigational(resource){ redirect_to after_sign_out_path_for(resource_name)       }
  end

  protected 

  def authenticate_scope!
    send(:"authenticate_#{resource_name}!", :force => true)
    self.resource = send(:"current_#{resource_name}")
  end
end

したがって、あなたの代替手段は次のようなことです

class RegistrationsController < Devise::RegistrationsController
  def destroy
    current_user.deleted = true
    current_user.save
    #some more stuff
  end
end
于 2012-06-18T08:32:08.107 に答える