我正在使用devise / Ruby on Rails,当我尝试打开我的localhost时,我得到了以下无限循环,并且不知道为什么因为我所做的唯一改变是使用Faker gem创建种子,并创建用户登录时的显示视图。
起初我认为我的控制器中的if / else语句出了问题,因为当我重新设置数据时,没有current_user登录,它应该带我到通过设计创建的新用户注册路径,但是失去了为什么它重复自己..
非常感谢任何和所有帮助!
以下是终端:
Started GET "/users/sign_in" for 127.0.0.1 at 2017-12-30 13:53:58 -0800
Processing by UsersController#show as HTML
Parameters: {"id"=>"sign_in"}
Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms)
UsersController
class UsersController < ApplicationController
before_action :authenticate_user!
def show
if current_user.present?
@user = current_user
@item = Item.new
@items = @user.items
else
redirect_to new_user_registration_path
end
end
end
用户#节目
<h2> Your to-do list</h2>
<div class="col-md-8">
<div class='items'>
<%= render partial: "items/item", local: { item: @item} %>
</div>
</div>
<div class="col-md-8">
<div class='new-item'>
<%= render partial: "items/form", local: { item: @item } %>
</div>
</div>
路线:
Rails.application.routes.draw do
get 'welcome/index'
get 'welcome/about'
root 'users#show'
resources :users do
resources :items, only: [:new, :create, :index]
end
devise_for :users
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
答案 0 :(得分:2)
能够找出root问题,即在routes.rb中放置代码的顺序。
答案 1 :(得分:0)
您的路线应该有devise_for :users
。
答案 2 :(得分:0)
您已经拒绝了访客用户的权限我的意思是哪个用户未使用此设置进行登录before_action :authenticate_user!
这意味着用户无法访问UsersController
之后未经重新申请权限登录的任何操作实际上不需要的show
行动if current_user.present?
show
行动应该是这样的
@user = current_user
@item = Item.new
@items = @user.items
删除if
else
条件。
希望能提供帮助
答案 3 :(得分:0)
就我而言:
users_controller.rb
before_action :logged_in?, only: :new
def new
@user = User.new
render layout: "session"
end
和
application_controller.rb
def logged_in?
redirect_to users_new_url unless current_user.present?
end
当我尝试重定向到'users / new'页面时,发生了相同的错误。
这仅仅是因为我试图重定向到'用户/新'页面,而 deflogin_in?也正在重定向到同一页面。
然后,我更改了 application_controller.rb 代码,如下所示:
def logged_in?
redirect_to root_url unless current_user.blank?
end
错误已解决。