我正在使用带有 mysql 数据库的 Rails 4.0.0。
我创建了 3 个模型,是 Movie 和 Genre 之间的关系。一部电影可以有很多类型,一个类型可以在很多电影中,所以,它是多对多的关系,所以我创建了另一个名为 MovieCategory 的模型作为中间表。唯一的区别是我使用字符串类型作为电影 ID(因为有时可能需要像“EAF7854”这样的 ID)。这是我的迁移:
电影:
class CreateMovies < ActiveRecord::Migration
def change
create_table :movies, {:id => false} do |t|
t.string :id
t.string :name
t.integer :year
t.timestamps
end
execute "ALTER TABLE movies ADD PRIMARY KEY (id);"
end
end
类型:
class CreateGenres < ActiveRecord::Migration
def change
create_table :genres do |t|
t.string :name
t.timestamps
end
end
end
电影类别:
class CreateMovieCategories < ActiveRecord::Migration
def change
create_table :movie_categories do |t|
t.string :movie_id
t.integer :genre_id
t.timestamps
end
end
end
这是我的模型:
电影:
class Movie < ActiveRecord::Base
self.primary_key = 'id'
has_many :movie_categories
has_many :genres, through: :movie_categories
end
类型:
class Genre < ActiveRecord::Base
has_many :movie_categories
has_many :movies, through: :movie_categories
end
电影类别:
class MovieCategory < ActiveRecord::Base
belongs_to :movies
belongs_to :genres
end
因此,每当我实例化一部电影并尝试 m.genres 时,我都会得到:
NameError: uninitialized constant Movie::Genres
我不知道这里发生了什么。