新手问题 ruby-china 源码疑惑

itsvoid · 2012年11月12日 · 最后由 itsvoid 回复于 2012年11月12日 · 2083 次阅读

在notification controller的源码里面:

@notifications = current_user.notifications.recent.paginate :page => params[:page], :per_page => 20

其中这个recent,我在Notification::Base里面没有发现有这个scope呢?难道是Mongoid::BaseModel里面自带的?

共收到 8 条回复

我确实是在Mongoid::BaseModel里面找到了这个recent,但是我直接在我自己的一个类似的notification.rb里面直接写一个recent scope怎么不起作用呢,我的意思是,必须要写在mongoid里面?

#1楼 @itsvoid 不会啊,你把代码贴出来看看。

#2楼 @Rei 我有一个节点

def index
        @selected_node = Node.first
        @custom_search_engines = @selected_node.custom_search_engines.recent.compact
        @topics = @selected_node.topics
        render 'layout'
    end

里面用到了@selected_node.custom_search_engines.recent

在CustomSearchEngine这个model里面定义了一个scope: scope :recent, desc(:created_at)

而Node和CustomSearchEngine两者的关系就是has_many和blongs_to。

求解。。。

first 不是 scope,会查数据库。

scope不是用来排序的吧。

我理解就是一个where条件,DRY。

#3楼 @itsvoid has_many 正常来说是可以接着用 scope 的,再把 model 代码贴出来看看?以及报了什么错误?

#7楼 @Rei 谢谢各位的热心回复。我已经找到原因了。是我在做分页的view文件里面,直接用的类CustomSearchEngine.page,而不是@selected_node.custom_search_engines.recent

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册