2015-02-24 97 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 

這種方法可以確保你發現當前用戶範圍的話題,保證他/她居然有「權限」以查看相關主題。

相關問題