0

互いに独立して更新できるようにしたい3つの異なるタイプフィールドを持つユーザーモデルがあります

同じページには、同じモデルで動作する 3 つの異なるフォームがあります。

  • ユーザー プロフィールの画像を変更する

  • ユーザー名/メールアドレスの変更

  • ユーザーパスワードを変更する

それらが分離されている理由: 写真は選択時に自動的にアップロードされます (パスワードを要求する必要はありません)。名前/メールはパスワードを要求せずに変更できますが、フォームを送信する必要があります。パスワードを変更するには現在のパスワードが必要です。

現在 User#update には、ロジック用の一連の if/else ブランチがif params[:commit] == "Update Password"あります。パスワードelsif params[:commit] == "Update Info"を更新したり、名前/メールを更新したりします。

ロジックが長くなるのが好きではありません。コントローラーのロジックをビューに結び付けるのは良い習慣ではないと思います (ロジックはparams[:commit]送信ボタンに表示されるテキストに基づいているため)。

これを行うより良い方法はありますか?

4

2 に答える 2

2

if..elsif..elsif チェーンを取り除くには、更新アクションを update_password、update_info などに分割し、それに応じてフォーム アクションを設定します。もちろん、ルートも更新する必要があります。

于 2013-01-19T12:27:18.537 に答える
0

コントローラーで、送信されたパラメーターを確認して、適切に動作することができますか?

if params[:password] && params[:password_confirmation]
  @user.password = params[:password]
end
if params[:email]
  @user.email = params[:email]
end
if @user.save
  etc...

次に、送信される内容に応じて期待どおりに動作する1つのルートがあります。

于 2013-01-19T10:17:38.693 に答える