ActiveRecord::Relationをかえすgetterの命名


すみません、細かい質問で申し訳ないです。

以下のようなgetterがあるとします。

[code]

    def users
      @users ||= User.where(foo: bar)
    end
    
[/code]

上記の問題は、usersという名前からモデルの配列を連想しますが、  
実際は`ActiveRecord::Relation`を返すことです。

なので以下のような命名にしたほうが正しいのかなと思いました。

[code]

    def user_relation
      @user_relation ||= User.where(foo: bar)
    end
    
[/code]

みなさんはどちらが適切だと思いますか？




いろいろおかしいです。

>
[code]

>     def users
>       @users ||= User.where(foo: bar)
>     end
>  
[/code]

このコードは認識の通り"ActiveRecord::Relationを返す"コードです。よって、メモ化する意味はありません。

[code]

    def users
      User.where(foo: bar)
    end
    
[/code]

あらかじめ検索条件を定義する手法として`scope`が用意されています。

[code]

    scope :users -> { where(foo: bar) }
    
[/code]

こう変形するとコード的にはActiveRecord::Relationを返すのは自明なので、「usersという名前からモデルの配列を連想」はしません。scaffoldでも

@users = User.all

みたいなコードが生成されますがこれも@usersはActiveRecord::Relationになります。

(だいたいRailsで「モデルの配列」が出てくるのはたいてい良くない兆候です)

さて、

[code]

        scope :users -> { where(foo: bar) }
    
[/code]

というのはあらかじめ検索条件を定義する手法な訳ですが、名前が`users`だろうと`users_relation`だろうと検索条件がなんなのか全くわかりません。

ということで、「Rails的なコード」について不慣れなのが違和感の原因なのかなと思いました。

