如何在Rails 4.2中创建命名的has_many和belongs_to关联?

时间:2016-03-15 06:39:43

标签: ruby-on-rails ruby-on-rails-4 rails-migrations

我有一个名为Comics的模型。我的总体目标是允许每个漫画都有可选的变体(has_many漫画)和单个variant_of(belongs_to漫画)。当我添加variant_of时,我希望逆变量字段也类似于相同的关系。

我首先创建了一个variant_of迁移:

class AddVariantOfToComics < ActiveRecord::Migration
  def self.up
    add_column :comics, :variant_of, :integer
  end

  def self.down
    remove_column :comics, :variant_of, :integer
  end
end

它的工作非常出色。然后我尝试制作变体索引,这是我遇到问题的方面:

class AddVariantsToComics < ActiveRecord::Migration
  def change
    add_index :comics, ['variant_of'], :name => 'variants' 
  end
end

漫画模型:

class Comic < ActiveRecord::Base
  has_many :variants, :class_name => "Comic", :foreign_key => 'variants', 
  belongs_to :variant_of, :class_name => "Comic", :foreign_key => 'variant_of'

  ...
end

有谁能告诉我如何联系这些领域?索引是正确的方法吗?还是我的命名妨碍了?

1 个答案:

答案 0 :(得分:0)

has_many关联的外键应该是variant_of。喜欢:

has_many :variants, :class_name => "Comic", :foreign_key => 'variant_of'

它之后不应该有逗号。在您的示例中,它是::foreign_key => 'variants',,这不是有效的语法。