对于名称与复数相同的模型,`has_many,:through`不在一个方向上工作

时间:2013-08-01 12:43:30

标签: ruby-on-rails ruby ruby-on-rails-4 initialization inflection

我正在构建一个应用程序来为星球大战RPG生成一个角色。我添加了Species模型。 Species与复数是同一个单数,这让我循环。我可以使用species_index_path在应用中使路线正常工作,但由于某种原因,has_many :characteristics, :through => :species_characteristics无法向一个方向发挥作用。

例如,我在控制台中有两个正确播种(和工作)的模型:CharacteristicsSpeciesCharacteristics按以下方式设置:

class Characteristic < ActiveRecord::Base
    has_many :species_characteristics
    has_many :species, :through => :species_characteristics
    has_many :skills
end

Species按以下方式设置:

class Species < ActiveRecord::Base
    has_many :species_characteristics
    has_many :characteristics, :through => :species_characteristics
end

他们之间的模型只有belongs_to

如果我从控制台拨打Characteristic.first.species,我会得到与该特征相关的物种清单。

但是,如果我致电Species.first.characteristics,我会收到以下信息:

NameError: uninitialized constant Species::Characteristics

我期待增加一个新的变形,或者某种方式,但我什么都没有。有没有人有更好的方法将模型重命名为Race?

<小时/> TLDR:has_many关系由于未初始化的常量错误而不能仅在一个方向上起作用,可能是由于拐点问题。除了重命名模型之外,还有什么方法可以修复它吗?

1 个答案:

答案 0 :(得分:3)

经过几个小时的修补,我发现了问题。我删除了对inflections.rb文件所做的任何额外更改,因此它看起来像这样:

ActiveSupport::Inflector.inflections(:en) do |inflect|
    inflect.uncountable %w( species )
end

然后我仔细检查了所有模型,以确保语法正确,关系有意义,以及那种性质的事情。事实证明,我应该使用has_many :species, :through => :species_characteristics,而它应该是has_many :species, through: :species_characteristics。一旦我在Species和Characteristics模型中修复了这些问题并在控制台中执行reload!,一切都开始有效。


特色模型:

class Characteristic < ActiveRecord::Base
    has_many :species_characteristics
    has_many :species, through: :species_characteristics
end

物种模型:

class Species < ActiveRecord::Base
    has_many :species_characteristics
    has_many :characteristics, through: :species_characteristics
end

SpeciesCharacteristic Model:

class SpeciesCharacteristic < ActiveRecord::Base
    belongs_to :characteristic
    belongs_to :species
end

因此结束了这个问题的恐怖统治。

相关问题