【问题标题】:Can't sort by rails index无法按导轨索引排序
【发布时间】:2016-11-22 00:49:31
【问题描述】:

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

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

控制器.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

【问题讨论】:

  • nameFoodTranslation 的属性,而不是 Food 的属性。您没有在那里显示任何关系,但您需要以某种方式包含food_translations 表以便能够对food_translations.name 进行排序。
  • 我明白了。我尝试加入(FoodTranslations.name),但语法肯定是错误的。
  • 重点是,您应该在问题中包含模型类以及相关关联(例如belongs_to)。
  • 这是否意味着我必须创建一个新的model.rb? Food Translations 是由 gem 制作的。
  • 某处必须有一些代码将食物翻译表映射到 ruby​​ 对象。您还可以包含您使用的 gem 的名称,以防有人(不是我)熟悉它以及它的确切作用。但我可以告诉你,你想做一个联接,而在 ActiveRecord 中进行联接最自然的方法是使用关联。

标签: ruby-on-rails ruby indexing


【解决方案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。在您的情况下,您可以为同一种语言的一种食物提供两种或多种翻译。

【讨论】:

  • food_translations.locale=xxx ?我为语言环境放什么?参数[:locale]?
  • 是的,如果已设置。我不知道您是如何将您的应用国际化的。
  • 所以应该像 .where(['food_translations.locale=?', params[:locale])
  • 还有一件事,你知道为什么在我的主页上 .where(['food_translations.locale=NULL)?
  • 好的,是的,你需要设置一个默认值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
  • 2020-04-30
  • 2020-02-07
相关资源
最近更新 更多