默认按关联字段与reverse_relationship排序

时间:2014-07-28 13:06:43

标签: ruby-on-rails

缩影可能有很多内容。

class Miniature < ActiveRecord::Base
  has_many :contents, foreign_key: "setmini_id", dependent: :destroy
  has_many :minisets, :through => :contents, source: :miniset
  has_many :reverse_contents, foreign_key: "miniset_id", class_name: "Content", dependent: :destroy
  has_many :setminis, :through => :reverse_contents, source: :set mini

在微缩的节目视图中,我目前列出了它的内容。我想要做的是向我的内容模型添加一个默认的排序范围,以便按名称排序。

class Content < ActiveRecord::Base
    default_scope { order('name ASC') }
    belongs_to :miniset, class_name: "Miniature"
    belongs_to :setmini, class_name: "Miniature"

我在这里的尝试失败并抱怨&#34;没有这样的专栏名称:&#34;。

通过正常的has_many_through关系,这可行,但我猜测是因为我在两个方向上使用连接表并声明class_name:&#34; Miniature&#34;这在这里不起作用。

有没有办法让这个列表按名称默认排序?

我已经尝试过&#34; content.name&#34;和&#34; setmini.name&#34;无济于事。

2 个答案:

答案 0 :(得分:0)

您需要在订单子句中使用数据库表的名称(而不是模型或关联名称)。如果您正在关注Rails&#39;命名约定,这将是:

order('contents.name ASC')

答案 1 :(得分:0)

在查看类似问题的其他答案后,我最终得到了以下内容:

default_scope join(:setmini).order(&#39; minatures.name ASC&#39;)