如何使用ActiveRecord连接两个表?
(对不起,这个问题重复。现在,我删除了另一个问题。) 我正在尝试RoR活动记录与关联。 并试图连接两个表,这是餐厅和restaurant_translations。这些分割为多语言支持。如何使用ActiveRecord连接两个表?
下面是这两个表的定义。
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
然后这里是控制器,它创造了我的头痛。
class RestaurantController < ApplicationController
def list
@restaurants = Restaurant.all
@restaurants = @restaurants.restaurant_translation.find_by(lang: "en")
end
end
所以错误显示是这样的。你能告诉我如何写?
@Pavan的建议引起了一些其他象这样的错误。
顺便说一句,我的看法是这样的。这是.slim文件。
h1 = t :restraunt_list_title
table
thead
tr
th = t :restraunt_list_type
th = t :restraunt_list_name
th = t :restraunt_list_url
th = t :restraunt_list_genre
th = t :restraunt_list_addr
tbody
- @restaurants.each do |restaurant|
tr
td = restaurant.restaurant_type
td = restaurant.restaurant_translations.first.restaurantname
td = link_to 'here', restaurant.url
td = restaurant.genre
td = restaurant.restaurant_translations.first.address
br
未定义的方法`restaurant_translation”的 餐厅:: ActiveRecord_Relation:0x007f83832cb498
有在你的代码的两个问题
首先,要调用.restaurant_translation
这应该是.restaurant_translations
为根据你的协会。
;第二,你拨打的上ActiveRecord_Relation这是一个集的记录(即,@restaurants
)不是单个实例。
我会在下面做,而不是实现你想要的。
class RestaurantController < ApplicationController
def list
@restaurants = Restaurant.includes(:restaurant_translations).where('restaurant_translations.lang = ?', "en").references(:restaurant_translations)
end
end
注:
你restaurants
表不应该包含restaurant_id
通过约定。
感谢您的回复。我改变了你前一段时间告诉我的内容,但不能解决问题。我会告诉你结果如何。 –
对不起,替换脚本会导致另一个问题。这是缺少列名称。 –
您能向我们展示您的视图示例吗? – Wikiti
@Wikiti感谢您的评论。修改了这个问题。 –
翻译表中没有“餐厅名称”列。 –