Rails & Devise: 两步确认参数错误



这是我悲伤和悲剧的延续…

浏览:

  • 我可以输入我的邮箱注册!
  • 我可以点击确认链接!
  • 我被带到正确的页面确认:

    http://localhost: 3000/user/确认吗?confirmation_token = jxOZQnyixE1PvnrptnYO

  • 问题在这里…一旦我提交表单,我得到这个错误:

ActiveRecord::RecordNotFound in ConfirmationsController#confirm_account

{"utf8"=>"✓",
 "_method"=>"put",
 "authenticity_token"=>"qUk6EDoR6N+V0h5O/jLKNZtl0hiaN/g9Gd5YdI2QhIU=",
 "user"=>{"confirmation_token"=>"jxOZQnyixE1PvnrptnYO",
 "password"=>"[FILTERED]",
 "password_confirmation"=>"[FILTERED]"},
 "commit"=>"Confirm Account"}

问题在第10行:

class ConfirmationsController < Devise::ConfirmationsController
  def show
    @user = User.find_by_confirmation_token(params[:confirmation_token])
    if !@user.present?
      render_with_scope :new
    end
  end
  def confirm_account
    @user = User.find(params[:user][:confirmation_token])
    if @user.update_attributes(params[:user]) and @user.password_match?
      @user = User.confirm_by_token(@user.confirmation_token)
      set_flash_message :notice, :confirmed      
      sign_in_and_redirect("user", @user)
    else
      render :action => "show"
    end
  end
end

我的show.html.erb

<%= form_for(resource, :url => confirm_account_path) do |f| %>
    <%= f.label :email %>
    <%= @user.email %>
    <%= f.hidden_field :confirmation_token %>
    <%= f.label :password %>
    <%= f.password_field :password %>
    <%= f.label :password_confirmation %>
    <%= f.password_field :password_confirmation %>
    <%= f.submit 'Confirm Account' %>
    <%= link_to 'Home', root_url %>
    <%= render :partial => 'devise/shared/links' %>
<% end %>

我已经为此哭了一个星期了…我真的希望这是我的一个愚蠢的错误(同时我也不希望)。

如果你需要的话,我很乐意为你提供更多的信息。为了方便起见,你能详细地描述一下你的答案吗?我是一个rails新手!

问题似乎是在寻找用户与User.find(params[:user][:confirmation_token])

这是因为find()方法将根据ID查找用户。使用不同的方法通过确认令牌查找用户应该返回正确的用户。在显示操作中,您已经使用过此方法一次。

希望这是最后一个问题!

最新更新