2016-06-11 205 views
-1

(對不起,這個問題重複。現在,我刪除了另一個問題。) 我正在嘗試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 

所以錯誤顯示是這樣的。你能告訴我如何寫?

enter image description here

@Pavan的建議引起了一些其他象這樣的錯誤。

enter image description here

順便說一句,我的看法是這樣的。這是.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 
+0

您能向我們展示您的視圖示例嗎? – Wikiti

+0

@Wikiti感謝您的評論。修改了這個問題。 –

+0

翻譯表中沒有「餐廳名稱」列。 –

回答

2

未定義的方法`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通過約定

+0

感謝您的回覆。我改變了你前一段時間告訴我的內容,但不能解決問題。我會告訴你結果如何。 –

+0

對不起,替換腳本會導致另一個問題。這是缺少列名稱。 –