Ruby on Rails で別の更新メソッドを使用してメソッドを更新するにはどうすればよいですか?

概要

updateアクション/メソッド以外のアクション/メソッドから更新することはできますか?たとえば、ユーザー コントローラーには、ユーザー アカウントの他の部分の更新メソッドがすでにあります。

ユーザーのパスワードを変更するには別のパスワードが必要です。このようなことは可能ですか:

def another_method_to_update
  user = User.authenticate(current_user.email, params[:current_password])
  if user.update_attributes(params[:user])
    login user
    format.js   { render :js => "window.location = '#{settings_account_path}'" } 
    flash[:success] = "Password updated" 
  else
    format.js   { render :form_errors }

  end
end

では、パスワード変更フォームには、その方法を使用して更新を実行することが通知されていますか?

これには 3 つのフィールドがあります: 現在のパスワード 新しいパスワード 新しいパスワードの確認

そして、フォームエラーを表示するためにajaxを使用します。

敬具

解決策

新しいカスタム更新アクション (another_method_to_update) の新しいルートを作成する以外に、編集用のフォーム ヘルパー内の URL オプションを変更して、フォームの送信先を指定することを忘れないようにしたいと思います。 ここに、フォーム ヘルパーとそのオプションに関するドキュメントへのリンクがあります。

したがって、例としては次のようになります。

ユーザー_コントローラー.rb

  def another_method_to_edit
    ...
  end
  def another_method_to_update
    ...
  end

ルート

  resources :users do
    get :another_method_to_edit, on: :member
    patch :another_method_to_update, on: :member
    put :another_method_to_update, on: :member
  end

another_method_to_edit.html.erb

  <%= form_with(model: user, url: {action: "another_method_to_update"}) do |form| %>
    ...
  <% end %>