我正在使用带有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
MovieCategory:
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
MovieCategory:
class MovieCategory < ActiveRecord::Base
belongs_to :movies
belongs_to :genres
end
所以,每当我开一部电影并尝试m.genres时,我得到了:
NameError: uninitialized constant Movie::Genres
我不知道这里发生了什么。
答案 0 :(得分:2)
belongs_to
是一对一的关系。所以尝试使用
belongs_to :movie
belongs_to :genre
而不是那些模型名称的复数。
您收到此错误b / c rails将belongs_to
解释为指向名为Genres
的模型,该模型尚未声明。