加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 对于名称与复数相同的模型,`has_many,:throug

发布时间:2020-12-16 21:00:01 所属栏目:百科 来源:网络整理
导读:我正在构建一个应用程序来为星球大战RPG生成角色.我添加了Species模型.物种是单数,因为它是复数,这让我循环.我可以通过使用species_index_path让应用程序在应用程序中正常工作,但出于某种原因,has_many:characteristics,:through = :species_characterist
我正在构建一个应用程序来为星球大战RPG生成角色.我添加了Species模型.物种是单数,因为它是复数,这让我循环.我可以通过使用species_index_path让应用程序在应用程序中正常工作,但出于某种原因,has_many:characteristics,:through => :species_characteristics不是一个方向.

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

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

它们之间的模型对每个模型都有一个belongs_to.

如果我从控制台调用Characteristics.first.species,我会得到与该特征相关的物种列表.

但是,如果我调用Species.first.characteristics,我会得到以下结果:

NameError: uninitialized constant Species::Characteristics

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

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

解决方法

经过数小时的修补,我发现了问题.我删除了对inflections.rb文件所做的任何额外更改,所以它看起来像这样:
ActiveSupport::Inflector.inflections(:en) do |inflect|
    inflect.uncountable %w( species )
end

然后我仔细检查了所有模型,以确保语法正确,关系有意义,以及那种性质的东西.事实证明,我使用的是has_many:species,:through => :species_characteristics应该是has_many:种类,通过:: species_characteristics.一旦我在Species和Characteristics模型中修复了这些问题并重新加载!在控制台中,一切都开始工作了.

特色模型:

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读