4

私は Rails モデルを持っており、User は Post と多くの関係を持っています。Post には、位置を格納する position という名前の属性が含まれています (acts_as_list gem)。位置には、ユーザーの投稿リストの位置が格納されます (順序は、投稿の作成/変更によるものではありません)。さらに、投稿にはタイムスタンプが保存さt.timestampsれています(移行で)

そこで、User.rb で次のように定義しました。

has_many :post, :order => "position", :dependent => :destroy

ただし、User.first.posts投稿は位置順ではありません。私はチェックしましたが、クエリであるSQLには次のものが含まれています:

ORDER BY post.created_at DESC, position

したがって、created_at はまだ使用されています。

created_at 属性を使用せずに位置で並べ替えるにはどうすればよいですか?

前もって感謝します!

解決 策 Post で定義されたデフォルトのスコープがあり、それが望ましくない順序を作成していました。

問題が解決しました

4

1 に答える 1

4

デフォルトのスコープを使用できます:

class Post < ActiveRecord::Base
  scope :by_position, order("position ASC")
  default_scope by_position
  #...
end

次に@user.posts、位置順 (ASC) のリストを返す必要があります。

また、次のことがうまくいくはずです:(複数形post

has_many :posts, :dependent => :destroy, :order => "posts.position ASC"
于 2012-12-20T15:08:17.857 に答える