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 等条目并将其发送以供查看?现在它正在选择所有数据,但根据我的需要进行支付

哦,对不起,重要!:

@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)

所以看起来我的查询。正如您所看到的,根据@linkla 结果,我选择了文章,并且链接 la 像以前一样选择了很多...如何做到这一点,他只为我的页面选择

4

2 回答 2

0

使用 where 子句而不是条件 find 怎么样?

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

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

于 2012-06-22T13:26:19.773 回答
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)  
于 2012-06-22T19:09:26.187 回答