2016-11-22 32 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