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 guiエディターを使用した後、正しいクエリは次のようになるはずです。

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:reviews

それらの中で。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」だけでなく「reviews」。「movie_id」をクエリするのはなぜですか?

4

1 に答える 1

3

移行で間違った列名を使用しています。レールの規則では、外部キーは単数である必要があります。そうでない場合は、関連付けのオプションハッシュを使用して、外部キーが何であるかをレールに伝える必要があります。

移行をロールバックするか、列名を修正して(moviegoers_idも間違っています)、再度移行するか、Railsに外部キーを通知します。

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

そして、同じことが両方のモデルの多くの側面で起こらなければなりません。

于 2013-02-22T23:52:25.243 に答える