无法按rails索引排序

时间:2016-11-22 00:49:31

标签: ruby-on-rails ruby indexing

我使用了rails globalize和I18n gem。但现在我无法对我的模型进行排序。你们能帮忙吗?

我尝试添加新索引,但我并不完全熟悉索引。

Controller.rb

def index
  @foods = Food.all.order(:name)

  add_breadcrumb "index", foods_path
end

模式

create_table "food_translations", force: :cascade do |t|
t.integer  "food_id",    null: false
t.string   "locale",     null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string   "name"
t.string   "bio"
end

add_index "food_translations", ["food_id"], name: "index_food_translations_on_food_id", using: :btree
add_index "food_translations", ["locale"], name: "index_food_translations_on_locale", using: :btree
add_index "food_translations", ["name"], name: "index_food_translations_on_name", using: :btree

create_table "foods", force: :cascade do |t|
t.string   "address"
t.string   "phone"
t.datetime "created_at",         null: false
t.datetime "updated_at",         null: false
t.string   "image_file_name"
t.string   "image_content_type"
t.integer  "image_file_size"
t.datetime "image_updated_at"
t.string   "yelp"
t.string   "youtube"
end

1 个答案:

答案 0 :(得分:1)

是的,您需要加入。如果您没有翻译模型,可以使用.joins作为查找器。像:

   Food.joins('INNER JOIN food_translations ON foods.id=food_translations.food_id')
       .order('food_translations.name').where('food_translations.locale=xxx')

ps:我想知道你为什么没有关于“food_id”和“locale”的索引,这应该是uniq。在您的情况下,您可以使用同一种语言为一种食物提供两种或更多种翻译。