###前提・実現したいこと
RailsでActiveRecord使って複数のテーブルの結合をしようとしております。
多言語のレストランガイドのイメージです。どの言語でも共通のテーブルと言語ごとの情報のファイルを結合しております。
従属する方のテーブルに条件つけて取りたい(英語ならlangはen、日本語ならja)のですが、Viewで取り出す際にエラーになってしまいます。
Associationの設定がダメなのか、取り出し方の問題なのか判別つかないのでご教示いただければ幸いです。
###発生している問題・エラーメッセージ
以下は出力されているエラーです。
undefined local variable or method `restaurant'
###該当のソースコード
テーブル定義はこんな感じです。
ruby
1create_table "restaurant_translations", id: false, force: :cascade do |t| 2t.integer "id", limit: 4, default: 0, null: false 3t.integer "restaurant_id", limit: 4 4t.string "restaurantname", limit: 255 5t.string "address", limit: 255 6t.string "tel", limit: 255 7t.text "description", limit: 65535 8t.string "lang", limit: 255, default: "", null: false 9t.datetime "created_at", null: false 10t.datetime "updated_at", null: false 11end 12 13create_table "restaurants", force: :cascade do |t| 14t.string "restaurant_type", limit: 255 15t.string "genre", limit: 255 16t.string "url", limit: 255 17t.string "fb", limit: 255 18t.string "mailaddr", limit: 255 19t.datetime "created_at", null: false 20t.datetime "updated_at", null: false 21end
こっちはController。
ruby
1class RestaurantController < ApplicationController 2 def list 3 @restaurants = Restaurant.all 4 @restaurants = @restaurants.restaurant_translation.find_by(lang: "en") 5 end 6end
こちらはModelファイル。
ruby
1class Restaurant < ActiveRecord::Base 2 has_many :restaurant_translations 3end 4 5class RestaurantTranslation < ActiveRecord::Base 6 self.table_name = 'restaurant_translations' 7 belongs_to :restaurant 8end
こちらはViewファイルです。
ruby
1View(.slim) 2 3table 4 thead 5 tr 6 th = t :restraunt_list_type 7 th = t :restraunt_list_name 8 th = t :restraunt_list_url 9 th = t :restraunt_list_genre 10 th = t :restraunt_list_addr 11 12 tbody 13 - @restaurants.each do |restaurant| 14 tr 15 td = restaurant.restaurant_type 16 td = restaurant.restaurant_translations.first.restaurantname 17 td = link_to 'here', restaurant.url 18 td = restaurant.genre 19 td = restaurant.restaurant_translations.first.address
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/13 11:01
2016/06/13 21:05
2016/06/13 23:57
2016/06/14 01:00
2016/06/14 02:00
2016/06/14 06:44