我正在构建一个应用程序来为星球大战RPG生成一个角色。我添加了Species
模型。 Species
与复数是同一个单数,这让我循环。我可以使用species_index_path
在应用中使路线正常工作,但由于某种原因,has_many :characteristics, :through => :species_characteristics
无法向一个方向发挥作用。
例如,我在控制台中有两个正确播种(和工作)的模型:Characteristics
和Species
。 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
关系由于未初始化的常量错误而不能仅在一个方向上起作用,可能是由于拐点问题。除了重命名模型之外,还有什么方法可以修复它吗?
答案 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
因此结束了这个问题的恐怖统治。