2016-03-19 4 views
0

エラーが発生し、整数の代わりに文字列フィールドを持つアイテムモデルが生成されました。ここ は私移行文字列として格納されていても整数の並びとしてソートされたフィールドによる並べ替え

class CreateItems < ActiveRecord::Migration 
    def change 
    create_table :items do |t| 
     t.string :name 
     t.string :url 

     t.text :photo 

     t.string :price 


     t.timestamps null: false 
    end 
    end 
end 

である。しかし、今、私は価格フィールドとレールによって私のアイテムをソートしたい、それが文字列として保存されているので、それを悪い道をソートします。 は、例えば、それはその価格9が今1111111111. よりも大きいと考えて、私はこのようにそれらを注文:私は

@items=Item.where(:category_id => @active_category_id).order(:price) 

何をしますか?

@items = Item.where(category_id: @active_category_id).sort { |a, b| b.price.to_i <=> a.price.to_i } 

これはあなたのカテゴリIDを持つすべて取得し、整数の代わりに文字列としての価格を比較しています

答えて

2

列の種類を修正しました。含まれる文字列が整数値を表す場合price列のデータが保存されます

class ChangePriceTypeInItems < ActiveRecord::Migration 
    def change 
    change_column :items, :price, :integer 
    end 
end 

:あなたは、次の移行でそれを行うことができます。ところで

enter image description here

、私はpricedecimalないintegerにする必要があると思います。しかし、あなたが選ぶ。

1

はこれを試してみてください。それはあなたが探している順序を与える必要があります。

+0

このコードは質問に答えるかもしれませんが、このコードが質問に答える*理由*および/または*方法に関する追加のコンテキストを提供すると、長期的な価値が向上します。 –

+1

が手に入れました。 – toddmetheny

関連する問題