Ruby on rails 如何使用ActiveRecord连接两个表?

Ruby on rails 如何使用ActiveRecord连接两个表?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,(很抱歉,此问题重复。现在,我删除了另一个问题。) 我正在尝试与关联的RoR活动记录。 并尝试连接两张桌子,即餐厅和餐厅。这些被拆分为多语言支持 这是这两个表的定义 create_table "restaurant_translations", id: false, force: :cascade do |t| t.integer "id", limit: 4, default: 0, null: false t.integer "restaurant_id

(很抱歉,此问题重复。现在,我删除了另一个问题。) 我正在尝试与关联的RoR活动记录。 并尝试连接两张桌子,即餐厅和餐厅。这些被拆分为多语言支持

这是这两个表的定义

create_table "restaurant_translations", id: false, force: :cascade do |t|
t.integer  "id",             limit: 4,     default: 0,  null: false
t.integer  "restaurant_id",  limit: 4
t.string   "restaurantname", limit: 255 
t.string   "address",        limit: 255 
t.string   "tel",            limit: 255 
t.text     "description",    limit: 65535
t.string   "lang",           limit: 255,   default: "", null: false
t.datetime "created_at",                                null: false
t.datetime "updated_at",                                null: false
end

create_table "restaurants", force: :cascade do |t|
t.string   "restaurant_type", limit: 255 
t.string   "genre",           limit: 255 
t.string   "url",             limit: 255 
t.string   "fb",              limit: 255 
t.string   "mailaddr",        limit: 255 
t.datetime "created_at",                  null: false
t.datetime "updated_at",                  null: false
end
还有模型

class Restaurant < ActiveRecord::Base
        has_many :restaurant_translations
end 

class RestaurantTranslation < ActiveRecord::Base
        self.table_name = 'restaurant_translations'
        belongs_to :restaurant
end
未定义的“餐厅翻译”方法 餐厅::ActiveRecord_关系:0x007f83832cb498

代码中有两个问题

首先,您正在呼叫
.restaurant\u translation
,根据您的联系,该电话应为
.restaurant\u translations

第二,您在ActiveRecord_关系上调用它,它是记录的集合(即,
@restaurants
),而不是单个实例

我想做下面的事情来实现你想要的

class RestaurantController < ApplicationController
  def list
    @restaurants = Restaurant.includes(:restaurant_translations).where('restaurant_translations.lang = ?', "en").references(:restaurant_translations)
  end
end
class RestaurantController
注:

按照惯例,您的
餐厅
表不应包含
餐厅id

未定义的“餐厅翻译”方法 餐厅::ActiveRecord_关系:0x007f83832cb498

代码中有两个问题

首先,您正在呼叫
.restaurant\u translation
,根据您的联系,该电话应为
.restaurant\u translations

第二,您在ActiveRecord_关系上调用它,它是记录的集合(即,
@restaurants
),而不是单个实例

我想做下面的事情来实现你想要的

class RestaurantController < ApplicationController
  def list
    @restaurants = Restaurant.includes(:restaurant_translations).where('restaurant_translations.lang = ?', "en").references(:restaurant_translations)
  end
end
class RestaurantController
注:


您的
餐厅
表不应按惯例包含
餐厅id

您能给我们展示一下您的观点吗?@Wikiti感谢您的评论。已修改此问题。翻译表中没有
restaurantname
列。@SergioTulentsev抱歉,我没有更新表定义。既然我已经把它换了,你能再检查一下吗?你能给我们展示一下你的观点吗?@Wikiti谢谢你的评论。已修改此问题。翻译表中没有
restaurantname
列。@SergioTulentsev抱歉,我没有更新表定义。既然我已经换了,你能再检查一下吗?谢谢你的回复。我改变了你刚才告诉我的事,但这不能解决问题。我将向您展示结果。抱歉,替换脚本会导致另一个问题。缺少列名。谢谢回复。我改变了你刚才告诉我的事,但这不能解决问题。我将向您展示结果。抱歉,替换脚本会导致另一个问题。这是缺少的列名。
class RestaurantController < ApplicationController
  def list
    @restaurants = Restaurant.includes(:restaurant_translations).where('restaurant_translations.lang = ?', "en").references(:restaurant_translations)
  end
end