【问题标题】:link_to in rails modelsrails 模型中的 link_to
【发布时间】:2014-08-20 10:01:18
【问题描述】:

如果用户尚未登录并访问localhost:3000/projects,则会出现此错误undefined method `projects' for nil:NilClass

我想更改它,以便将其重定向到登录页面。但是使用类似

if signed_in?
  @projects=current_user.projects
else
  link_to 'Please sign in first' ,signin_path
end

会引发错误

这就是 SessionsHelper 的样子

module SessionsHelper
  def sign_in(user)
    remember_token = User.new_remember_token
    cookies.permanent[:remember_token] = remember_token
    user.update_attribute(:remember_token, User.digest(remember_token))
    self.current_user = user
  end

  def signed_in?
    !current_user.nil?
  end

  def current_user=(user)
    @current_user = user
  end

  def current_user
    remember_token = User.digest(cookies[:remember_token])
    @current_user ||= User.find_by(remember_token: remember_token)
  end

  def sign_out
    current_user.update_attribute(:remember_token,User.digest(User.new_remember_token))
    cookies.delete(:remember_token)
    self.current_user = nil
  end 
end

这是我的应用程序控制器

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  include SessionsHelper
end

class ProjectsController < ApplicationController
  def index
    @projects=Project.all
  end
end 

【问题讨论】:

  • 如果已登录,您在哪里使用? ?
  • 在我的项目控制器索引操作中

标签: ruby-on-rails ruby-on-rails-4 grails-controller


【解决方案1】:
if current_user
  @projects = current_user.projects
else
  redirect_to signin_path, notice: "Please sign in first"
end

application_controller.rb 中定义current_user 方法也是常见的做法。

【讨论】:

  • 这个错误再次为#<0x007f8629cbb2c0>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多