私はRoRアクティブレコードを関連付けることを試みています。 レストランとレストランの2つのテーブルを接続しようとしています。これらは複数言語サポートのために分割されています。ActiveRecordsテーブルを関連付けるときにメソッドエラーは表示されません
これらの2つのテーブルの定義は次のとおりです。
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
とモデル。
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.includes(:restaurant_translations).where('restaurant_translations.lang = ?', "en").references(:restaurant_translations)
logger.debug @restaurants
end
end
ファイル(.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
「エラーが発生しました」というエラーが発生します。関連テーブルパラメータを表現する方法を教えてください。前もって感謝します。
cf. restaurant_translationは次のようなものです。
申し訳ありません。私は現在のコントローラを書いていない。 現在のコントローラのソースコードを更新しました。もう一度調べていただけますか? –
ええ、 'td = restaurant.restaurant_translations.first.restaurantname'を' td = restaurant.restaurant_translations.first.name'に変更してください。 – oreoluwa
まだ動作しません。エラーは "未定義のローカル変数またはメソッド"レストラン "" –