Rails上的NameError与模型中的字符串id字段的多对多关系

时间:2013-11-07 21:09:37

标签: mysql ruby-on-rails ruby ruby-on-rails-4 many-to-many

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

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

1 个答案:

答案 0 :(得分:2)

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

belongs_to :movie
belongs_to :genre

而不是那些模型名称的复数。

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