0

我正在使用带有 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

我不知道这里发生了什么。

4

1 回答 1

2

belongs_to是一对一的关系。所以尝试使用

belongs_to :movie
belongs_to :genre

而不是这些型号名称的复数形式。

您收到此错误 b/c rails 解释belongs_to为指向名为 的模型Genres,该模型尚未声明。

于 2013-11-07T21:12:06.927 回答