0

我得到了这段代码,当我尝试使用第二种更优雅的方法时,我得到了“缺失方法”。我认为位于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

您可以在一行中完成此操作。

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

在您的情况下,我想您会收到有关“数组的未定义方法顺序”的错误。ActiveRecord 方法 .all 返回数组。

于 2013-02-10T11:02:34.810 回答
0

all加载记录并返回数组。尝试使用作用域

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