2011-01-06 1 views
1

Railsにはこれらの素敵なchainableメソッドがあります。自分自身を追加するには?私は私のカスタムメソッドを呼び出すしたいから、モデル内のクラスメソッドを定義すると思ったが、これは唯一の「チェーン」の冒頭で動作します:`order`と` limit`のようなカスタムの "連鎖可能な" ActiveRelationメソッドを定義する

class << self 
    def order_by_specialness 
    order(:specialness) 
    end 
end 

私は何とかActiveRecord::Relationを拡張する必要があります疑いますこれは連鎖可能な各クエリメソッドによって返されるものです。しかしそこから、私は迷っています。

答えて

3

あなたがscopeを使用したい:

scope :order_by_specialness, order(:specialness) 

コールで:

User.order_by_specialness.first 

order_by_specialnessを使用すると、本当にあなたに任意の時間を節約しませんが。 specialのようなものを使用する必要があります。

User.special.first 
+0

名前付きスコープが「死んでいます」。 http://www.railway.at/2010/03/09/named-scopes-are-dead/ – Bjorn

+0

いいえ、そうではありません。 – Garrett

+0

@Garrettを拡張するために、Scopeを使わないことを提案しているRailwayの著者は、彼らが修正したレールチームにバグを提出し、スコープを使用すべきではないという考えをしました。 https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/4142-arel-methods-in-scope-cause-iss-with-non-existent-tables – SooDesuNe

関連する問題