2012-12-20 33 views
6

mẫu của tôi trông như thế này:Rails Devise: làm cách nào để đặt biểu mẫu đăng nhập và khôi phục mật khẩu trên cùng một trang?

.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 

Nó thực sự hoạt động, nhưng nó tạo ra hai hình thức với id trùng lặp như ...

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

Làm thế nào để thay đổi điều này để các ID không bản sao?

+1

Bạn có thể ghi đè thông số đầu vào như thường lệ: 'f.email_field: email,: id => 'forgot_email'' – taro

+0

Bạn có cần hiển thị cả hai biểu mẫu trên cùng một trang hoặc cùng một lúc không? –

Trả lời

5

Bạn có thể thêm không gian tên vào biểu mẫu của mình.

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

Chỉ cần những gì tôi cần, cảm ơn! – Duopixel

0

Nếu bạn không thích liên quan đến không gian tên, bạn có thể thử yêu cầu AJAX. Điều này sẽ đảm bảo rằng bạn có thể đổi tên các trường trong khi tạo một yêu cầu POST.

Hoặc bạn có thể ghi đè mật khẩu mặc định PasswordsController of Devise và viết phương thức riêng để khôi phục mật khẩu. Để ghi đè lên, bạn có thể chỉ cần mượn mã của một số phương thức từ {RubyFolder} /lib/ruby/gems/1.9.1/gems/devise-2.1.2/app/controllers/devise/passwords_controller.rb và thay đổi nó một chút cho ứng dụng (ví dụ, đổi tên các tham số đầu vào dự kiến).

Các vấn đề liên quan