0

私はこのコードを取得し、2番目のよりエレガントなアプローチを使用しようとすると「Missingmethod」を取得します。http://guides.rubyonrails.org/active_record_querying.htmlのドキュメントは、役に立たないか、不完全だと思います。何か案は?

ちなみに、これに対するさらに「ワンライナー」のエレガントなアプローチを書くのを手伝ってください:)

  def index
@sortby = params[:sort_by]

# THIS WORKS

#if @sortby == nil
#  @movies = Movie.all
#else
#  @movies = Movie.order(@sortby)
#end

# THIS DOESNT. WHY? I THOUGHT METHOD CHAINING AND LAZYLOAD WOULD WORK.
@movies = Movie.all
@movies = @movies.order(@sortby) unless @sortby == nil

終わり

4

2 に答える 2

0

allレコードをロードし、配列を返します。スコープを使用してみてください:

@movies = Movie.scoped
@movies = @movies.order(@sortby) unless @sortby.nil?
于 2013-02-10T10:57:21.627 に答える
0

これは1行で実行できます。

@movies = params[:sort_by].nil? ? Movie.all : Movie.order(params[:sort_by]).all

あなたの場合、「配列の未定義のメソッドの順序」についてエラーが発生していると思います。ActiveRecordメソッド.allは配列を返します。

于 2013-02-10T11:02:34.810 に答える