Ruby on rails 如何使用ActiveRecord连接两个表?
(很抱歉,此问题重复。现在,我删除了另一个问题。) 我正在尝试与关联的RoR活动记录。 并尝试连接两张桌子,即餐厅和餐厅。这些被拆分为多语言支持 这是这两个表的定义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
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