所以我想显示所有数据 我要么试试
@movies = Movie.find(:all)
or
@movies = Movie.scope #default call I think?
但是如果有一个参数集
,我也希望能够.order @movies = @movies.order(params[:sort_by]) if params[:sort_by]
我收到以下错误
#
的未定义方法`order'
不确定如何解决此问题
编辑:更新 这是代码。如果.where也存在,我似乎无法使.order工作。 (如果我注释掉。然后.order开始工作
def index
@all_ratings = Movie.get_ratings
@movies = Movie.all
sort_column = sort_by_column((params[:sort_by] || session[:sort_by]))
@movies = @movies.order(sort_column) if !sort_column.nil?
ratings = (params[:ratings] || session[:ratings])
if params[:commit] == "Refresh"
if !ratings.nil?
@movies = @movies.where(rating: params[:ratings].keys)
else
@movies = @movies.where(rating: @all_ratings)
end
session[:ratings] = params[:ratings]
else
is_param_empty = (params[:ratings].nil?) ? true : false
@movies = @movies.where(sort_by_ratings(ratings, is_param_empty))
end
end
私人
def sort_by_column(sort_column) sort_by = Movie.column_names.include?(sort_column) ? sort_column : nil if !sort_by.nil? params[:sort_by] = session[:sort_by] = sort_by end return sort_by end def sort_by_ratings(ratings, is_param_empty) if is_param_empty == true params[:ratings] = session[:ratings] redirect_to movies_path(:ratings => params[:ratings], :commit => "Refresh", :sort_by => params[:sort_by]) else session[:ratings] = params[:ratings] = ratings return ratings.keys end end
为#error
获取未定义的方法`order'答案 0 :(得分:2)
在Rails 3上,ActiveRecord的all
方法返回一个数组。因此,如果您尝试在Rails 3上执行User.all.order(:first_name)
,您将获得:NoMethodError: undefined method 'order' for #<Array:0x007fd795de8a90>
在Rails 4上,all
方法返回一个可链接的ActiveRecord_Relation
。因此,此代码User.all.order(:first_name)
将适用于Rails 4。
如果您使用的是Rails 3,则需要Movie.order
代替Movie.all.order
答案 1 :(得分:0)
不确定那里发生了什么,但如果您想订购所有电影记录,请尝试以下方式:
@movies = Movie.all
attr = params[:sort_by]
@movies = @movies.order(attr.to_sym => :asc) if attr