Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 5-关联模型,子模型由多个_Ruby On Rails_Associations - Fatal编程技术网

Ruby on rails Rails 5-关联模型,子模型由多个

Ruby on rails Rails 5-关联模型,子模型由多个,ruby-on-rails,associations,Ruby On Rails,Associations,在正确的结社顺序上有问题 我有一个CharacteraCharClass,所有CharClasse都有一套可用的Perks。角色可以选择要获得的特权和要忽略的特权 我将手动填充CharClass表和Perks表中的set-in-stone选项 感谢Benjamin在下面的评论,我修改了我的模式,使其看起来像这样(减去不相关的内容): 这解决了所有数据错误,但有一点冗余。由于每个问题都有一个答案,这确实满足了我最初的需求。接下来我会再问一个问题。我的想法是关于你可能想要如何设置你的桌子,但我认为这

在正确的结社顺序上有问题

我有一个
Character
a
CharClass
,所有
CharClass
e都有一套可用的
Perks
角色
可以选择要获得的
特权
和要忽略的特权

我将手动填充
CharClass
表和
Perks
表中的set-in-stone选项

感谢Benjamin在下面的评论,我修改了我的模式,使其看起来像这样(减去不相关的内容):


这解决了所有数据错误,但有一点冗余。由于每个问题都有一个答案,这确实满足了我最初的需求。接下来我会再问一个问题。

我的想法是关于你可能想要如何设置你的桌子,但我认为这里没有一个明显的最佳答案。这和你想说的差不多,但我会讲一些语义学

CharClass
has_many :class_perks
has_many :characters

ClassPerk
belongs_to :char_class      # Use intermediate table if you want has_many/has_many
has_many :character_perks   # between CharClass and ClassPerk for perk overlap

Character
belongs_to :char_class
has_many :class_perks, :through => char_class
has_many :character_perks

CharacterPerk
belongs_to :character
belongs_to :class_perk
此设置允许您根据职业检查角色可以获得哪些特权,并且仍然可以将角色的进度与职业特权分开

有些吹毛求疵的事情:

  • 属于表示此表/模型包含相关模型的外部id。我认为角色引用类更有意义
  • 您遇到的几个错误似乎与问题没有直接关系,但可能是奇怪的表格设置的副作用。我不介意在这里讨论它们,但有些人可能会认为它们应该是单独的帖子。显示更多的模式可能比迁移更有益
  • 关于save错误,如果您使用的是强参数,请记住允许char_class_id,并且输入名称与表上的属性匹配

0否决票我看到了你的Reddit帖子。感谢您链接到StackoverFlow。我想帮忙,但伙计。我认为我们需要更少的应用背景知识,更多的当前代码来查看。@Charlie谢谢你的提示!试图更好地写问题;我以为背景故事会有助于理解需求,但重读它,我明白你的意思。我将很快用其他信息编辑它。明天我将修改我的模式,使其看起来类似,并发布更新!实际上,我犯的大多数错误都是过去的,但我想提供证据,证明我在发帖前确实“仔细考虑了这些概念”,并对我的思考过程给出一个想法。在读了更多关于联想的文章后,我肯定认为我已经把它颠倒了。我将尝试一个中间桌子的想法。
CharClass
has_many :class_perks
has_many :characters

ClassPerk
belongs_to :char_class      # Use intermediate table if you want has_many/has_many
has_many :character_perks   # between CharClass and ClassPerk for perk overlap

Character
belongs_to :char_class
has_many :class_perks, :through => char_class
has_many :character_perks

CharacterPerk
belongs_to :character
belongs_to :class_perk