2015-02-24 94 views
0

我在ruby应用程序中使用will_paginate gem,并且大部分工作正常。但是当我没有登录用户时,我遇到了麻烦。使用will_paginate与作用域,未定义的方法错误

该应用程序是一个reddit类型的东西,包含主题和相关的帖子和​​评论。

在我的主题模式,我有以下几点:

class Topic < ActiveRecord::Base 
    has_many :posts, dependent: :destroy 

    scope :visible_to, -> (user) {user ? all : :publicly_viewable} 

    scope :publicly_viewable, -> {where(public: true)} 

    scope :privately_viewable, -> {where(public: false)} 

end 

在我TopicsController:

class TopicsController < ApplicationController 
    require 'will_paginate/array' 

    def index 
    @topics = Topic.visible_to(current_user).paginate(page: params[:page], per_page: 10) 
    authorize @topics 
    end 

当我链接到主题上单击无CURRENT_USER,按照我的理解,“用户“应该返回零,这应该是一个功能记录。应该返回只有public_viewable的主题。但是,我发现了以下错误消息:

undefined method `paginate' for :publicly_viewable:Symbol 

我想也许我处理的是一个数组,所以我在“需要‘will_paginate /阵’”加,但是这并没有帮助。

有没有人有任何想法?

谢谢。

回答

1

请勿使用符号。请直接拨打范围publicly_viewable

scope :visible_to, -> (user) {user ? all : publicly_viewable} 

也就是说,通常情况下最好是从根对象范围查询。像这样:

def index 
    @topics = (current_user.try(:topics) || Topic.privately_viewable).paginate(page: params[:page], per_page: 10) 
end 

这样,您的主题来自拥有它们的模型。这适合特别好以后像这样寻找资源:

def show 
    @topic = current_user.topics.find_by_id(params[:id]) 
end 

这种方法可以确保你发现当前用户范围的话题,保证他/她居然有“权限”以查看相关主题。

相关问题