Ruby on rails 轨道/装置:未提供任何位置。Can';t构建URI。密码重置时
我正在使用Rails 4.2和Desive。每当我尝试使用“重置密码”页面时,都会出现以下错误: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,但从未出现过此问题。我怀疑这可能与本教程有关: 并在我的应用程序控制
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| %>