Ruby on Rails - 显示已登录用户的帖子

时间:2014-11-14 12:40:05

标签: ruby-on-rails

我刚刚开始使用Rails,而且我一直在显示只属于已登录用户的属性。

我有一个用户,帖子模型有以下关联

class User < ActiveRecord::Base
  has_many :posts, dependent: :destroy
end

class Post < ActiveRecord::Base
  belongs_to :user
end

并且在帖子控制器上我试图通过名为current_user的会话帮助方法访问当前用户的帖子,但它抱怨posts未定义

def index
  @posts = current_user.posts
end

这是辅助方法

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

有人可以对此有所了解吗?

错误消息
PostsController中的NoMethodError #index
未定义的方法`posts'为nil:NilClass

3 个答案:

答案 0 :(得分:3)

方法posts未定义。您的current_user对象为nil,这意味着找不到具有此remember_token的用户。如果您从不想在undefined method posts for nil:NilClass中使用current_user.try(:posts)类型,那么如果用户退出,他们就不会看到错误。或者在应用程序控制器中创建此方法。

<强> application_controller.rb

  private
    def is_logged_in?
       current_user.present?
    end

并在控制器的before_filter部分调用此方法。

无论如何为什么不在您的身份验证过程中使用devise gem。它是非常可靠的,并附带开箱即用的current_userauthenticate_user!方法

答案 1 :(得分:1)

它表示current_user的值为nil,而nil没有方法posts。 检查您的用户记住令牌,并将您输入的参数打印到find_by

答案 2 :(得分:0)

Eeeer ......它在视图或控制器上抱怨吗?告诉我们它究竟抱怨什么(复制粘贴结果)。也许在你的视图中使用@posts而不是帖子(当然帖子是未定义的,@ post是定义的。)