Joe*_*sey 4 ruby ruby-on-rails
我有一个控制器方法,通过派生属性对元素进行排序.只要我不尝试分页,我就可以打印到视图.当我打电话时,@foos = @foos.page params[:page]我收到以下错误:undefined method 'page' for #<Array:...>
谁能在这里提供一些指导?谢谢.
这是整个控制器方法:
def index_by_capacity
if current_user.is_view_major?
@foos = Foo.major_attr(:name)
else
@foos = Foo.order(:name)
end
@foos = @foos.sort_by! {|a| a.capacity_available.to_i }
@total_foos = @foos.count
@foos = @foos.page params[:page]
respond_to do |format|
format.html
format.json { render json: @foos }
end
end
Run Code Online (Sandbox Code Playgroud)
该.sort_by!方法返回一个没有方法page的数组(无法对ruby数组进行分页,您必须自己实现它或使用外部库).
该上的ActiveRecord ::关联对象分页的作品,由像查询返回.where或.order
在您的情况下,您应该在数据库级别执行订单(比通过Ruby执行排序更快):
@foos.order(:capacity_available)
Run Code Online (Sandbox Code Playgroud)如果capacity_available属性是String(不是Integer),则可以将其作为INT进行CAST:
@foos.order('CAST(capacity_available AS INT) ASC')
Run Code Online (Sandbox Code Playgroud)(您可能需要编辑该CAST()函数,它应该适用于PostGreSQL,不确定MySQL)
| 归档时间: |
|
| 查看次数: |
621 次 |
| 最近记录: |