2012-06-22 40 views
0

我有这样的代码如何选择在轨道分页?

@pre_articles = Article.find(:all, :conditions => { :ART_ID => @linkla.map(&:LA_ART_ID)}) 
@articles = Kaminari.paginate_array(@pre_articles).page(params[:page]).per(15) 

它的选择对我来说阵列的数据,但它是巨大的,所以我决定添加分页。它选择了15个条目进行查看,但也为每个页面(日志),我看到,SQL是如何选择所有数组在第一@pre_articles。要获得更多速度:如何在每个页面上选择例如0-15,15-30,30-45等条目并将其发送至视图?现在它选择的所有数据,但dislpaying因为我需要

噢,对不起,重要!

@linkla = LinkArt.where(:LA_ID => @la_typs.map(&:LAT_LA_ID), :LA_GA_ID => @genart.map(&:GA_ID)) 
@articles = Article.where(:ART_ID => @linkla.map(&:LA_ART_ID)).page(params[:page]).per(15) 

所以看起来我的查询。正如你看到取决于@链接结果我选择的文章,并链接拉选择很多像以前一样......如何做,他只选择我的网页

+0

你在你的看法使用'@ linkla'变量?整个操作可以在一个查询中完成。 –

+0

你在使用旧系统吗?你的专栏命名约定让我想起'青春灵魂'时代的气味...... –

+0

@KandadaBoggu不,它的购物车零件 – byCoder

回答

0

解决了上述问题:

LinkType 
    has_many :links 
    # let us assume there is a column called name 

# I wasn't sure about this model from your description 
GenArt 
    has_many :links 
    # let us assume there is a column called name 

Link 
    belongs_to :article 
    belongs_to :link_type 
    belongs_to :gen_art 
    # columns: id, article_id, link_type_id, gen_art_id 

Article 
    has_many :links 

假设你params哈希表包含link_type_namesgen_art_names

Article.joins(:links => [:link_type, :gen_art]).where(
    :links => { 
    :link_type => {:name => params[:link_type_names]}, 
    :link_type => {:name => params[:gen_art_names]} 
    } 
).page(7).per(50) 
+0

明天会尝试 – byCoder

+0

你可以在你的问题中发布你的模型和他们的关系吗?还可以列出您正在使用的输入参数与控制器操作。 –

0

那么使用where子句,而不是条件查找?

@articles = Article.where(:ART_ID: @linkla.map(&:LA_ART_ID)).page(params[:page]).per(15) 

生成的SQL查询将包含一个LIMIT子句以避免加载不必要的数据。

+0

以下非常重要的编辑! – byCoder