2010-06-29 2 views
0
ActiveRecord::StatementInvalid: 
Mysql::Error: Unknown column 'schedules.id' in 'on clause': 
SELECT `schedules`.* FROM `schedules` INNER JOIN `shops` ON 
(`schedules`.`id` = `shops`.`shop_id`) INNER JOIN `areas` ON 
(`areas`.`id` = `shops`.`area_id`) 

Правильная формулировка SQL должна включать в себя «график» «shop_id» = «магазины» Ид 'вместо «графики» «идентификатор» = «магазины» «shop_id» , Что я могу изменить в своих моделях, чтобы это произошло?ActiveRecord присоединиться has_many:.... Через

Вот модели для этих трех классов:

class Area < ActiveRecord::Base 
    has_many :shops 
    has_many :schedules, :through => :shop 
end 

class Schedule < ActiveRecord::Base 
    belongs_to :shop 
    has_many :areas, :through => :shop 
end 

class Shop < ActiveRecord::Base 
    belongs_to :area # foreign key - area_id 
    has_many :schedule 
end 

Команда, которая создала эту команду SQL: Schedule.find: все,: присоединяется => [: магазин,: районы]

В дб/schema.rb у меня есть:

create_table "areas", :force => true do |t| 
    t.string "campus" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

create_table "shops", :force => true do |t| 
    t.integer "area_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

create_table "schedules", :force => true do |t| 
    t.integer "shop_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 
+0

Это помогло бы видеть вас схему базы данных DB/schema.rb и код, полученный, что SQL. – thomasfedb

+0

Не уверен, что синтаксис простого соединения работает с: через. Когда все становится сложным, я просто использую подробный формат: : joins => ["INNER JOIN магазины ON schedules '.' Shop_id '=' магазины '.' Id '", ...] – aceofspades

ответ

0

Я думаю, что ваш запрос должен быть определен с помощью: включить опцию, как так

Schedule.find :all, :include => [:shops, :areas] 

Опция: присоединиться для определения присоединиться к логике, такие как «INNER JOIN ...»

Смежные вопросы