0

我有一个像这样构建数组的方法:

def editing
  @doc = Doc.find(params[:id])
  articles = Article.find(:all, :joins => :docs, :order => 'publications.position')
  unbuilt_edits = articles - @doc.edits.map(&:article)
  unbuilt_edits.each do |article|
    @doc.edits.build(:body => article.body, :article_id => article.id, :doc_id => @doc.id)
  end
end

我的问题是:我如何unbuilt_edits像我一样订购articles?如在publications.position? Publications是一个连接表,所以你知道。

谢谢!

更新

@doc.edits.map(&:article)如果返回不为空,则基本上订单会中断。当它为空时,它工作正常。

4

1 回答 1

1

我只会加载您感兴趣的文章:

unbuilt_edits = Article.find(:all, :joins => :docs, :order => 'publications.position', :conditions => ['id NOT IN (?)', @doc.edits.map(&:article_id)])

这样可以避免加载您不感兴趣的文章,然后将它们从数组中删除。如果你这样做,他们也应该保持秩序。

这假设 article_id 是编辑模型上的正确键。

如果您对文章感兴趣,您也可以只选择“id,body”:select => 'id,body'

于 2013-06-26T06:22:10.957 回答