5

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

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

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由于未初始化的常量错误,关系不仅仅在一个方向上起作用,可能是因为拐点问题。除了重命名模型之外,还有什么方法可以解决它?

4

1 回答 1

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。一旦我在“物种”和“特征”模型中解决了这些问题并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

物种特征模型:

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

至此结束本期的恐怖统治。

于 2013-08-01T21:59:34.973 回答