Ruby on rails 在模型中,名称的单数与复数相同,`has_many,:通过`isn';我不能朝一个方向工作
我正在构建一个应用程序,为《星球大战》RPG生成一个角色。我添加了Ruby on rails 在模型中,名称的单数与复数相同,`has_many,:通过`isn';我不能朝一个方向工作,ruby-on-rails,ruby,ruby-on-rails-4,initialization,inflection,Ruby On Rails,Ruby,Ruby On Rails 4,Initialization,Inflection,我正在构建一个应用程序,为《星球大战》RPG生成一个角色。我添加了物种模型Species的单数和复数是一样的,这让我很困惑。通过使用物种索引路径,我可以在应用程序中获得运行良好的路径,但由于某种原因,具有许多:特征,:通过=>:物种特征不是单向运行的 例如,我有两个模型在控制台中被正确地植入(并工作):特征和种类特性按以下方式设置: class Characteristic < ActiveRecord::Base has_many :species_characteristics
物种
模型Species
的单数和复数是一样的,这让我很困惑。通过使用物种索引路径
,我可以在应用程序中获得运行良好的路径,但由于某种原因,具有许多:特征,:通过=>:物种特征
不是单向运行的
例如,我有两个模型在控制台中被正确地植入(并工作):特征
和种类
<代码>特性按以下方式设置:
class Characteristic < ActiveRecord::Base
has_many :species_characteristics
has_many :species, :through => :species_characteristics
has_many :skills
end
class Species < ActiveRecord::Base
has_many :species_characteristics
has_many :characteristics, :through => :species_characteristics
end
它们之间的模型只有一个属于它们中的每一个
如果我从控制台调用Characteristic.first.species
,我会得到与该特征相关的物种列表
但是,如果我调用物种.第一.characteristics
,我会得到以下结果:
NameError: uninitialized constant Species::Characteristics
我希望增加一个新的拐点,或者用某种方法来解决这个问题,但我什么也没想到。除了将模型重命名为Race之类的名称外,还有其他更好的方法吗
TLDR:有许多关系由于未初始化的常量错误(可能是由于拐点问题)而不能仅在一个方向上工作。除了重命名模型,还有什么办法可以修复它吗?经过几个小时的修补,我发现了这个问题。我删除了对拐点.rb文件所做的任何额外更改,使其看起来像这样:
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.uncountable %w( species )
end
然后我仔细检查了所有模型,以确保语法正确,关系有意义,以及类似的性质。事实证明,我使用的是has\u many:species,:through=>:species\u characteristics
,而它应该是has\u many:species,through::species\u characteristics
。一旦我修复了物种和特征模型中的那些问题,并重新加载了在控制台中,一切都开始工作
特征模型:
class Characteristic < ActiveRecord::Base
has_many :species_characteristics
has_many :species, through: :species_characteristics
end
class SpeciesCharacteristic < ActiveRecord::Base
belongs_to :characteristic
belongs_to :species
end
类特征
物种模型:
class Species < ActiveRecord::Base
has_many :species_characteristics
has_many :characteristics, through: :species_characteristics
end
类物种
物种特征模型:
class Characteristic < ActiveRecord::Base
has_many :species_characteristics
has_many :species, through: :species_characteristics
end
class SpeciesCharacteristic < ActiveRecord::Base
belongs_to :characteristic
belongs_to :species
end
class SpeciesCharacteristic
这就结束了这一期的恐怖统治。可能与它有关,但对我来说,它似乎是一个bug;考虑一下,如果它还不在这里的话:“萨瓦,这就是我所想的…但后来我尝试了“特征”。singularize.pluralize成功了。@sawa我尝试了将influct.plural“species”、“species”和influct.uncountable%w(species)
添加到influctions文件中,这两种方法似乎都不起作用。因此,即使它与这个问题有关,我认为它并不完全相同。不过,我很感激你把这个链接起来让我看看。