0

私は、Devise の users_controller.rb で「def create」と「def update」を使用して何かを動作させようとして、髪を伸ばしてきました。

たとえば、私はこれを試しました:

  def create

    @user = User.new(params[:user])

  respond_to do |format|
    if @user.save
      flash[:notice] = "Test Save"
    else
      flash[:notice] = "Test Error"
    end
  end

  end

このコードを適切なコードと共に使用して、ビュー セクションにフラッシュ通知を表示しました。ただし、空白のフォーム、不完全なフォーム、または完全なフォームを送信しても何も表示されません。ユーザー登録は完全なフォームで行われますが、「def create」に入力したものには従いません。別のページに送信するなど、フラッシュ通知以外にこれをテストする他の方法を試しましたが、応答がありません。「def update」も同じで、そのコードすら使っていないようです。

私はこれに完全に唖然としています。何かアイデアはありますか?

4

2 に答える 2

1

あなたの質問を正しく理解していれば、デバイスコントローラーを上書きする必要があります。

# app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
  def new
    super
  end

  def create
    # add custom create logic here
  end

  def update
    super
  end
end 

ここで、デフォルトのデバイスコントローラーが何をしているかを確認できます: https://github.com/plataformatec/devise/tree/master/app/controllers/devise

フラッシュメッセージを編集したいだけなら、上記のリンクを見ると、 devise がset_flash_messageというメソッドを使用していることがわかります

  # Sets the flash message with :key, using I18n. By default you are able
  # to setup your messages using specific resource scope, and if no one is
  # found we look to default scope.
  # Example (i18n locale file):
  #
  #   en:
  #     devise:
  #       registrations:
  #         signed_up: 'Welcome! You have signed up successfully.'

したがって、devise.en.yml ファイルを正しいテキストで編集するだけで、出来上がりです!

注:コントローラーを上書きする場合は、追加することも忘れないでください

# app/config/routes.rb
devise_for :users, :controllers => {:registrations => "registrations"}
于 2013-02-26T16:07:46.157 に答える
0

代わりにこれはどうですか?

if @user.save
  redirect_to @user, notice: 'User was successfully created.'
else
  render action: 'new'
end

を設定していますがflash、リダイレクトもレンダリングもありません。空白のページを取得しているのか、それとも本文のない 200 を取得しているのか疑問に思っています。

これにより、show アクションにリダイレクトされ、flash成功した場合は通知が設定され、失敗した理由を示すnewフォームがレンダリングされます。@user.errors

devise を使用している場合は、Registrations Controller を使用して新しいアカウントを作成できます。新しいアカウントを作成する必要はありません。registrations#create新しいものを作成すると、 とのusers#create両方を指しているルートで競合が発生する可能性があります。POST /users

于 2013-02-19T16:59:17.170 に答える