在链接到 Rails 中的模型视图时需要一些帮助

Posted

技术标签:

【中文标题】在链接到 Rails 中的模型视图时需要一些帮助【英文标题】:Need some help with linking to model views in Rails 【发布时间】:2011-05-18 22:08:11 【问题描述】:

我正在开发龙与地下城角色数据库应用程序。我有一个 Character 模型和几个属于 Character 且具有 has_one 关联的模型,例如 HitPoints、ArmorClass 等。这些都是从字符视图中构建、编辑和显示的。但是,我想创建包含更多属于 Character 模型的信息的新页面。我希望在视图顶部有一个链接,将用户带到装备页面,该页面上显示单独的模型,例如武器、盔甲、装备等。

这是我需要一些指导的地方。装备页面是否会是一个属于角色的新模型,而我只是将武器、盔甲、装备等模型加载到装备视图中?

如果是,这些模型是否与角色模型、装备模型或两者都具有belongs_to关系?

最后,如果我这样构建它:Character has_one Equipment 和 Equipment has_many Weapons,Weapons 模型是否也与 Character 模型有belongs_to 关系?

在此先感谢,我希望我想要做的事情很清楚。我仍然无法谈论我想用 Rails 完成什么。

【问题讨论】:

【参考方案1】:

听起来您对模型的一些概念有误解。例如,HitPointsArmorClass 不应是与您的 Character 具有 has_one 关联的模型。它们只是Character 的属性。所以你的模型应该看起来像这样:

class Character
  attr_accessor :name, :hit_points, :armor_class

  def initialize(name, hitpoints=10, armor_class=0)
    @name = name
    @hitpoints = hitpoints
    @armor_class = armor_class
  end
  # some other stuff, etc
end

然后你可以像这样访问它们:

fighter = Character.new("Conan", 100, 12)
puts "I am #fighter.name and I have #fighter.hit_points hitpoints."
puts fighter.armor_class  # outputs 12

另外,我想说Equipment 模型是错误的概念。您需要的是Item 模型。你提到的所有东西(武器、盔甲、装备)都只是物品。 “字符”has_many“项目”更有意义。还有那个“项目”has_many“字符”,因为你可能会有多个字符和多个项目......所以它可能是多对多关系以保持简单。然后你的“Item”模型可以有一个“ItemType”字段,告诉你它是武器、盔甲、药水等等。

所以你的Item 模型可能看起来像这样

class Item
  attr_accessor :name, :type

  def initialize(name, type)
    @name = name
    @type = type
  end
end

另一个更接近您所说的选项是添加ItemSet 模型。我们将这个模型放在CharacterItems 之间。这样做会让你说

“字符”has_one“项目集” “项目集”has_many“项目” Character”通过“ItemSet”有很多“Items”

所以基本上,这表明在你的“世界”中你有很多角色和物品。但是每个角色都有一组独特的这些物品。

我就是这样做的。

在上面的代码中,您需要将has_manyhas_one 等属性添加到模型中。我把它省略了,这样你就可以更容易地看到模型本身,这样你就可以自己弄清楚你想怎么做。

【讨论】:

我最初将 HitPoints 和 ArmorClass 作为模型,因为它们中的每一个都有几个组件或数据要显示(HitPoints 有总和当前的 HP,ArmorClass 有盔甲、盾牌、奖金等),我想让它们保持井井有条并在以后设计它们会更容易。这样做与将它们作为属性相比有什么真正的缺点吗?我喜欢您对 Item 和 ItemSet 模型的建议,这绝对让我深思。 我认为拥有 Character.total_hit_points 和 Character.current_hit_points 而不是关系会更简单。生命值似乎与角色过于相关,无法成为自己的模型。 ArmorClass 可能需要不同的模型,具体取决于它可能具有的属性。 好吧,我认为您可能在概念上建模错误。命中点可以是 total_hitpoints 和 current_hitpoints 属性。 ArmorClass 只是一个数字,不是吗?它是计算出来的,但它仍然只是一个数字。我不认为这两件事是模型。如果我们使用您当前的模型逻辑,那么“名称”也可能是一个对象。和一个“角色”有一个“名字”。对我来说没有意义,并且增加了一层复杂性而没有增加太多好处。 “字符”具有“名称”属性更有意义。 我最初的想法是把经常变化的东西做成关联模型。因此,生命值、护甲等级等被构建为关联模型,既可以使它们保持独立,又易于编辑。我将姓名、阶级、种族、性别等设置为属性,因为这些东西是静态的,不会改变。不过,我同意我在这里增加了一些不必要的复杂性。

以上是关于在链接到 Rails 中的模型视图时需要一些帮助的主要内容,如果未能解决你的问题,请参考以下文章

如何让模型验证与 Rails 中的视图层对话以提供简单的功能?

将外键传递给 Rails 中的部分渲染

Rails - 从模型中获取值到应用程序布局中

Rails,在视图中显示模型的名称而不是 id

需要 Forge Viewer 和 Gyroscope 的帮助。需要将初始相机位置固定到 Bim 模型中的当前视图

如何在视图中设置和调用 rails 方法来更新对象的属性