【发布时间】:2017-06-06 22:31:51
【问题描述】:
我有以下名为 Login 的控制器:
class LoginController < ApplicationController
skip_before_action :verify_authenticity_token
protect_from_forgery
before_action :require_user
helper_method :current_user
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
rescue ActiveRecord::RecordNotFound
end
def require_user
redirect_to login_path unless current_user
end
def show
end
def new
if session[:user]
@user = User.find(session[:user])
end
end
def destroy
reset_session
redirect_to "/login/acesso", notice: "Você foi deslogado"
end
def create
user = User.validate(login_params[:email], login_params[:senha])
if user
session[:user] = user.id
redirect_to "/home/inicio", notice: "login feito com sucesso"
else
redirect_to "/login/acesso", notice: "Dados incorretos"
end
end
private
def login_params
params.require(:login).permit(:email, :senha)
end
end
这是我的路线:
Rails.application.routes.draw do
root 'login#new'
get '/home/inicio', to: 'home#index'
scope '/login' do
get '/acesso', to:'login#new'
post '/acessorecebendo', to:'login#create'
get '/sair', to:'login#destroy'
end
resources :login
resources :home
resources :produtos
resources :fornecedors
end
和错误:
没有路由匹配 {:action=>"show", :controller=>"login"},丢失 所需键:[:id]
在行:
def require_user
redirect_to login_path unless current_user
end
重点是:如果我删除登录控制器中的“before_action :...”行,我会收到此错误:
找不到 'id'=2 的用户
new.html.erb(登录视图):
<% if flash[:notice] %>
<div class="notice"><%= flash[:notice] %></div>
<% end %>
<div class="login-page">
<div class="form">
<form class="register-form" action="/login/acessorecebendo" method="post">
<input type="text" name="login[email]" placeholder="Email"/>
<input type="password" name="login[senha]" placeholder="Senha"/>
<button>Cadastrar</button>
<p class="message">Já é registrado? <a href="#">Login</a></p>
</form>
<form class="login-form" action="/login/acessorecebendo" method="post">
<input type="text" name="login[email]" placeholder="email"/>
<input type="password" name="login[senha]" placeholder="password"/>
<button>login</button>
<p class="message">Não está registrado <a href="#">Criar uma conta</a></p>
</form>
<% if session[:user] %>
<a href="/login/sair">Sair sessão <%= @user.nome %> </a>
<% end %>
</div>
</div>
所以,为了尝试解决这个问题,我需要检查是否有人登录并重定向到正确的视图。我正在尝试在行动之前用这个做类似的事情......
谁能给我解释一下,好吗? :\
我尝试遵循以下解决方案:Couldn't find User with id=1
但它没有工作..
【问题讨论】:
-
您能添加将您重定向到 show 方法的视图吗?
-
什么观点?问题出在 before_action 方法上:\
-
@SebastiánPalma 我放了登录控制器的视图
标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4