2012-12-20 5 views
6

Meine Vorlage sieht wie folgt aus:Rails Devise: Wie lege ich das Login-Formular und das Wiederherstellungs-Passwort auf die gleiche Seite?

.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 

Es funktioniert tatsächlich, aber es erzeugt zwei Formen mit doppelten IDs wie ...

<input id="user_email" name="user[email]" size="30" type="email"> 

Wie kann ich das die IDs so ändern sich nicht Duplikat?

+1

Sie können Eingabeparameter wie üblich überschreiben: 'f.email_field: email,: id => 'forgot_email'' – taro

+0

Müssen Sie beide Formulare gleichzeitig oder auf derselben Seite anzeigen? –

Antwort

5

Sie können Ihren Formularen einen Namespace hinzufügen.

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

Genau das, was ich brauchte, danke! – Duopixel

0

Wenn Sie nicht wie Namespaces beteiligt, können Sie einen AJAX-Request versuchen. Dies garantiert, dass Sie Felder während der Erstellung einer POST-Anfrage umbenennen können.

Oder Sie können einen Standard PasswordsController von Devise überschreiben und eigene Methode schreiben, um das Passwort wiederherzustellen. Für Ihre Überschreibung können Sie einfach den Code einiger Methoden von {RubyFolder} /lib/ruby/gems/1.9.1/gems/devise-2.1.2/app/controllers/devise/passwords_controller.rb ausleihen und ihn leicht ändern Anwendung (benennen Sie beispielsweise erwartete Eingabeparameter um).

Verwandte Themen