Ser*_*ean 5 ruby initialization ruby-on-rails inflection ruby-on-rails-4
我正在构建一个应用程序来为星球大战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
Run Code Online (Sandbox Code Playgroud)
Species 按以下方式设置:
class Species < ActiveRecord::Base
has_many :species_characteristics
has_many :characteristics, :through => :species_characteristics
end
Run Code Online (Sandbox Code Playgroud)
他们之间的模型只有一个belongs_to.
如果我Characteristic.first.species从控制台打电话,我会得到与该特征相关的物种清单.
Species.first.characteristics但是,如果我打电话,我会得到以下信息:
NameError: uninitialized constant Species::Characteristics
Run Code Online (Sandbox Code Playgroud)
我期待增加一个新的变形,或者某种方式,但我什么都没有.有没有人有更好的方法将模型重命名为Race?
has_many由于未初始化的常量错误,关系不能仅在一个方向上起作用,可能是由于拐点问题.除了重命名模型之外,还有什么方法可以修复它吗?
经过几个小时的修改,我解决了这个问题。我删除了对 inflections.rb 文件所做的任何额外更改,因此它看起来像这样:
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.uncountable %w( species )
end
Run Code Online (Sandbox Code Playgroud)
然后我仔细检查了所有模型,以确保语法正确、关系有意义以及具有这种性质。事实证明,我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
Run Code Online (Sandbox Code Playgroud)
品种型号:
class Species < ActiveRecord::Base
has_many :species_characteristics
has_many :characteristics, through: :species_characteristics
end
Run Code Online (Sandbox Code Playgroud)
物种特征模型:
class SpeciesCharacteristic < ActiveRecord::Base
belongs_to :characteristic
belongs_to :species
end
Run Code Online (Sandbox Code Playgroud)
至此,这个问题的恐怖统治结束了。
| 归档时间: |
|
| 查看次数: |
1068 次 |
| 最近记录: |