0

私はレールアプリを持っており、デバイスビューをカスタマイズして角度付きのインタラクティブ性を追加しています。だから、私の入力は次のようになります

<input id="user_name" name="name" ng-blur="isNameBusy()" type="text">

(不要な属性はすべて省略されています)

これは、フォーム送信中のリクエストが次のようになることを意味します。

  Parameters: {"utf8"=>"✓", "authenticity_token"=>"xxx", "name"=>"test", "email"=>"test@mail.com", "password"=>"[FILTERED]", "commit"=>"Sign up"}

しかし、devise はこのリクエストを理解していません。これは、devise ビューのデフォルトの入力が次のような name 属性を持っているためです:

<input id="user_name" name="user[name]" ng-blur="isNameBusy()" type="text">
<input id="user_email" name="user[email]"  type="email">

リクエストは次のようになります。

  Parameters: {"utf8"=>"✓", "authenticity_token"=>"xxx", "user"=>{"name"=>"test", "email"=>"test@mail.com", "password"=>"[FILTERED]"}, "commit"=>"Sign up"}

ご覧のとおり、フィールドはユーザーキーでラップされています。

もちろん、js でデフォルトのデバイス名を使用できます。

 registerForm.user[name].$valid

しかし、それはとても醜く見えます!devise に私の要求を理解させるにはどうすればよいですか?

4

1 に答える 1

0

入力フィールドの name 属性を変更したくない場合は、次のようにします。

<input id="user_name" name="user[name]" ng-blur="isNameBusy()" type="text">

ここでマスターを見つけることができるデフォルトの Devise コントローラーをオーバーライドする必要があります: https://github.com/plataformatec/devise/blob/master/app/controllers/devise/sessions_controller.rb

次に、カスタム パラメータに応じて変更します。

この回答は、セッションを管理する場合にのみ専用です。それ以外の場合は、ユーザー モデルの「クラシック」コントローラーで問題ありません (たとえば、新しいユーザーを作成する場合)。

于 2013-08-30T16:31:32.423 に答える