2016-11-27 9 views
0

データベースからいくつかのアイテムを表示しようとしています。アルファベット順に並べ替える必要があります。これはループです:Railsモデルを配列にしないで並べ替えるにはどうすればよいですか?

@foods.where(category: "#{Food::CATEGORIES[cat]}").find_each do |food| 

.............. 

end 

は私が設定しようとしたdefault_scope:

何もしなかったし、このようにそれらを並べ替えてみました
default_scope { order(name: :asc) } 

:「

@foods = @foods.sort_by{|food| food.name } 

た後、私は言って例外をキャッチしていました'on array'のメソッドを使用できません。

EDIT:@foods定義:

class FoodsController < ApplicationController 
    before_action :set_food, only: [:show, :edit, :update, :destroy] 
    before_filter :authorize, only: [:create, :delete] 

    def index 
    @foods = Food.all 
    @food_categories = Food::CATEGORIES.keys.sort 
    # @current_category ||= params(:category) 

    end 

.... 

end 

EDIT:それは重要な場合は、ここでの食品カテゴリ:

CATEGORIES = { "Dairy & Eggs" => "Dairy", 
       "Meat & Fish" => "Animal", 
       "Fruits & Vegetables" => "Plant", 
       "Nuts, beans & legumes" => "Nuts", 
       "Grains" => "Grains", 
       "Drinks" => "Beverages", 
       "Sweets & Candy" => "Sweets", 
       "Oils & Fats" => "Oils", 
       "Other" => "Other" 

}あなたが持っている

+0

「@ foods」の定義に質問を追加できますか? –

+1

2つ目は、Foodがアプリケーションのモデルである場合、Food.where(あなたの条件)を使用することができます.order(name::asc)、次に2番目のdefault_scopeは正しく適用する必要があります。コンソールからそれを使用しようとしていて、コンソールを再起動しなかったか、または再ロードしていませんか? – Waheedi

+0

@foodsの定義を追加しました –

答えて

0

「 'どこ' メソッドを使用することはできません配列上にあるのでFood.all配列を返します。ちょうど@foods = Food.order(:name)を使用してください。

+0

それでもそれを並べ替えることはできません:| | –

+0

未処理の生成されたSQLクエリを使用して出力ログを表示します。そしてあなたはpostgresやmysqlを使っていますか? –

+0

「生成された未処理のSQLクエリで出力ログを表示する」とはどういう意味ですか? MySQL –

関連する問題