2012-12-20 11 views
6

マイテンプレートは以下のようになります。それは実際に動作Rails Devise:同じページにログインフォームと回復パスワードを配置するにはどうすればいいですか?

.dropdown.light 
     .login 
     =form_for("user", :url => user_session_path) do |f| 
      = f.hidden_field :redirect_to, :value => request.fullpath 
      = f.email_field :email, :placeholder => "email", :size => '' 
      = f.password_field :password, :placeholder => "password", :size => '' 
      div.remember 
      = f.check_box :remember_me, :checked => "checked" 
      = f.label :remember_me 
      .clearfix 
      a.forgot.pull-left href="#forgot" Forgot your password? 
      input.pull-right type="submit" value="Sign in" 
     .forgotten 
     =form_for(:user,:as => :user_forgot, :url => password_path(:user), :html => { :method => :post }) do |f| 
      p 
      strong Reset your password 
      p.small Give us your e-mail and you’ll be back in a jiffy 
      div= f.email_field :email 
      .clearfix 
      a.forgot.nevermind.pull-left href="#forgot" Nevermind 
      input.pull-right type="submit" value="Reset password" 
     .sent 
     p 
      strong Email sent! 
     p In a couple of minutes you should receive an email with a link to reset your password 

が、それは、このような...

IDがないので、私はこれを変更するにはどうすればよい
<input id="user_email" name="user[email]" size="30" type="email"> 

として重複したIDを持つ2つのフォームが発生重複?

+1

'f.email_field:email、:id => 'forgot_email'' – taro

+0

両方のフォームを同じページに表示する必要がありますか? –

答えて

5

フォームに名前空間を追加できます。

=form_for(:user, :as => :user_forgot, :url => password_path(:user), :namespace => 'forgot', :html => { :method => :post }) do |f| 
+0

ちょうど私が必要なもの、ありがとう! – Duopixel

0

名前空間を使用したくない場合は、AJAXリクエストを試すことができます。これにより、POST要求を作成中にフィールドの名前を変更できることが保証されます。

また、DeviseのデフォルトのPasswordsControllerを上書きし、独自の方法でパスワードを回復することもできます。オーバーライドのために、いくつかのメソッドのコードを{RubyFolder} /lib/ruby/gems/1.9.1/gems/devise-2.1.2/app/controllers/devise/passwords_controller.rbから借りて、あなたのために少し変更するだけですアプリケーション(たとえば、予想される入力パラメーターの名前を変更する)。