我刚刚开始使用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
答案 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_user
和authenticate_user!
方法
答案 1 :(得分:1)
它表示current_user的值为nil
,而nil没有方法posts
。
检查您的用户记住令牌,并将您输入的参数打印到find_by
。
答案 2 :(得分:0)
Eeeer ......它在视图或控制器上抱怨吗?告诉我们它究竟抱怨什么(复制粘贴结果)。也许在你的视图中使用@posts而不是帖子(当然帖子是未定义的,@ post是定义的。)