Ruby on rails 轨道/装置:未提供任何位置。Can';t构建URI。密码重置时

Ruby on rails 轨道/装置:未提供任何位置。Can';t构建URI。密码重置时,ruby-on-rails,ruby,ruby-on-rails-4,devise,Ruby On Rails,Ruby,Ruby On Rails 4,Devise,我正在使用Rails 4.2和Desive。每当我尝试使用“重置密码”页面时,都会出现以下错误: Nil location provided. Can't build URI. on Password reset 在生产中,它附带500个内部服务器错误 带有重置令牌的电子邮件实际发送。如果用户在电子邮件中打开链接,他们可以返回站点更改密码。尽管如此,当点击“重置密码按钮”时,仍会出现500错误 我以前曾多次使用Desive,但从未出现过此问题。我怀疑这可能与本教程有关: 并在我的应用程序控制

我正在使用Rails 4.2和Desive。每当我尝试使用“重置密码”页面时,都会出现以下错误:

Nil location provided. Can't build URI. on Password reset
在生产中,它附带500个内部服务器错误

带有重置令牌的电子邮件实际发送。如果用户在电子邮件中打开链接,他们可以返回站点更改密码。尽管如此,当点击“重置密码按钮”时,仍会出现500错误

我以前曾多次使用Desive,但从未出现过此问题。我怀疑这可能与本教程有关:

并在我的应用程序控制器中显式写入
资源名称
资源
设计映射
方法,但它们没有干扰任何其他设计路由,即使在注释掉它们之后,错误仍然存在

编辑:

我没有
PasswordController
,只是坚持使用designe的大多数默认设置。我也不会在我的应用程序中的任何地方使用
respond\u

我的Desive模型如下所示:

class User < ActiveRecord::Base
    devise :database_authenticatable, :registerable, :confirmable, :lockable,
     :recoverable, :rememberable, :trackable, :validatable, 
     :omniauthable, :omniauth_providers => [:stripe_connect]


    validates :username, presence: true
    validates :time_zone, presence: true
    has_one :teacher, dependent: :destroy
    has_many :bookings, foreign_key: :student_id
    has_many :reviews, foreign_key: :student_id, dependent: :destroy
    has_many :messages, dependent: :destroy
    VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
    validates_format_of :email, with: VALID_EMAIL_REGEX

end
以下是视图:

<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post, :class => "sky-form" }) do |f| %>
  <%= devise_error_messages! %>
  <h3 class="text-center"><%= t('.header') %></h3>
  <section>
    <div class="row">
      <label class="label col col-4"><%= t('.email') %></label>
        <div class="col col-8">
          <label class="input">
            <%= f.email_field :email %>
          </label>
        </div>
      </div>
    </section>
    <footer class="text-right">
      <%= f.submit t('.resetpwbtn'), class: "btn btn-theme-bg btn-lg" %>
    </footer>
  <% end %>
resource\u name,:url=>password\u path(resource\u name),:html=>{:method=>:post,:class=>“sky form”})do | f |%>

如果您使用的是
respond\u with
,则只能与资源一起使用。我遇到了这个问题,解决办法是你
render

如果是这样的话

render :text => 'false'
可能会有帮助。但为了确定,我们必须看到您的模型,以了解更多的问题

另一个问题可能是,
响应\u,它需要一个
ActiveRecord
对象来映射路由


我不确定它是如何在代码中实现的,但我在过去解决了这个错误的一些方法。

我在另一个项目中遇到了这个问题。在我的例子中,我缺少
create
操作的模板文件。如果我们查看Deviate的create函数,它使用
respond\u with
方法根据请求的“Accept”头的mime类型呈现正确的信息。例如,对于html响应,它可能正在尝试加载
create.html.erb
(或其他模板类型,具体取决于您的配置)


有点晚了,希望它有帮助

当使用新的turbo/hotwire时,Desive可以实现这一点

在我的例子中,我定制了表单来设置
“data turbo”:“false”

像这样:

<%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { "data-turbo": "false", method: :post }) do |f| %>


您正在调用JSON api?Shiv Raj:不,我不是。您需要共享您的Deave模型、密码控制器(如果有)以及其他信息,如Deave生成的迁移文件,以便我们了解更多信息。我只是在方法中写的。但是我没有使用我刚才查看的
密码控制器
,也没有在我的应用程序的任何地方使用
respond\u with
。如果您愿意的话,我用我的模型更新了。您的路线是什么样子的,以及视图中的实现?这在开发中有用吗?我添加了相关的路线和视图。同样不,它在开发中也不起作用。实际上,电子邮件确实会发送,而且这个过程是有效的。很简单,在表单提交后,站点崩溃。问题是Deviate controller中的
使用
进行响应:
<%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { "data-turbo": "false", method: :post }) do |f| %>