Rails:按连接表排序编译的数组

时间:2013-06-26 06:07:44

标签: ruby-on-rails ruby-on-rails-3 has-many-through

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

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)返回非空,则基本上订单会中断。当它为空时它可以正常工作。

1 个答案:

答案 0 :(得分:1)

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

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

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

这假定article_id是编辑模型中的正确键。

如果您对:select => 'id,body'

这篇文章感兴趣,也可以选择'id,body'