2013-02-22 74 views
2

我有以下應用程序。電影有很多評論,電影觀衆有很多評論。 當我嘗試進行審查,電影,我收到以下錯誤導軌沒有這樣的列錯誤

Review Load (0.1ms) SELECT "reviews".* FROM "reviews" WHERE "reviews"."movie_id" = 5 
SQLite3::SQLException: no such column: reviews.movie_id: SELECT "reviews".* FROM  "reviews" WHERE "reviews"."movie_id" = 5 
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: reviews.movie_id:  SELECT "reviews".* FROM "reviews" WHERE "reviews"."movie_id" = 5 

使用SQL界面編輯器,我發現後,相關聯的正確的查詢應該是

SELECT "reviews".* FROM "reviews" WHERE "movie_id" = 5 

review.rb

class Review < ActiveRecord::Base 
    belongs_to :movie 
    belongs_to :moviegoer 
    attr_protected :moviegoer_id 
end 

movie.rb和moviegoer.rb有

has_many:評論

其中。 schema.rb

ActiveRecord::Schema.define(:version => 20130222225620) do 

create_table "moviegoers", :force => true do |t| 
t.string "name" 
t.string "provider" 
t.string "uid" 
t.datetime "created_at", :null => false 
t.datetime "updated_at", :null => false 
end 

create_table "movies", :force => true do |t| 
t.string "title" 
t.string "rating" 
t.text  "description" 
t.datetime "release_date" 
t.datetime "created_at", :null => false 
t.datetime "updated_at", :null => false 
end 

create_table "reviews", :force => true do |t| 
t.integer "potatoes" 
t.text "comments" 
t.integer "moviegoers_id" 
t.integer "movies_id" 
end 

end 

我在做什麼錯?爲什麼rails會查詢「評論」,「movie_id」而不是「movie_id」?

+0

正如你可以在評論表中看到的,沒有'movie_id'列,而是有一個「movies_id」。 – 2013-02-22 23:48:10

回答

2

您的遷移中的列名稱錯誤。軌道慣例是外鍵要單一。如果他們不是那麼你需要告訴軌道什麼外鍵與關聯選項散列。

要麼回滾您的遷移,修復列名稱(moviegoers_id也是錯誤的),然後再次遷移,或者告訴rails外鍵。

Class Review < ActiveRecord::Base 
    belongs_to :movie, :foreign_key => 'movies_id' 
    belongs_to :moviegoer, :foreign_key => 'moviegoers_id' 
end 

同樣的事情發生在兩個模型的許多方面。

+0

謝謝,我修復了遷移並重新部署 – 2013-02-22 23:59:28