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 %>