2016-11-22 40 views
0

我使用了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

'name'是FoodTranslation'的'属性,而不是'Food'。你没有在那里显示任何关系,但你需要以某种方式包含'food_translations'表,以便能够对'food_translations.name'进行排序。 – Amadan

+0

我明白了。我尝试加入(FoodTranslations.name),但语法肯定是错误的。 –

+0

问题是,你应该在你的问题中包含你的模型类以及相关的关联(比如'belongs_to')。 – Amadan

回答

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”和“区域”应uniq的一个指标。在你的情况下,你可以为同一种语言的一种食物进行两次或多次翻译。

+0

food_translations.locale = xxx?我为场所设置了什么? PARAMS [:现场]? –

+1

是的,如果设置。我不知道你是如何国际化你的应用程序的。 – Fallenhero

+1

所以应该像.where(['food_translations.locale =?',params [:locale]) – Fallenhero