在ActiveRecord上使用Ruby on Rails链接方法不起作用?

时间:2013-02-10 10:52:25

标签: ruby-on-rails ruby rails-activerecord

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

2 个答案:

答案 0 :(得分:0)

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

@movies = Movie.scoped
@movies = @movies.order(@sortby) unless @sortby.nil?

答案 1 :(得分:0)

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

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

在你的情况下,你会收到有关'未定义的Array方法顺序'的错误。 ActiveRecord方法.all返回数组。