【问题标题】:Rails : How to Arrange the models?Rails:如何排列模型?
【发布时间】:2012-01-15 09:43:16
【问题描述】:

我在以有效方式排列模型时遇到了一些问题。这些模型的东西:

City
Building
CityBuilding
WoodProduction

现在,当然,一个城市通过 city_buildings 有许多建筑物。城市建筑具有一些基本属性,例如居住在那里的人口。但是,如果我们谈论的是锯木厂,则有 2 座建筑物需要保存更多信息,例如生产的木材量。

所以,在这个例子中,锯木厂,我希望能够做类似的事情:

current_city.wood_production.amount

如果一个城市有一个 wood_production 协会,则获取木材的数量。到目前为止一切都很好。

但是,wood_production 还需要存储木材的生产速率。该比率由一个公式生成,该公式需要有关锯木厂建筑等级的信息(可在 city_buildings 中找到)。

我已经通过在 wood_production 中使用嵌套关联使其工作,例如:

has_many :city_buildings, :through => :city

所以,现在我可以执行类似的操作:

c = City.first
w = c.wood_production
w.city_buildings.where(:building_id => ...).level

虽然它有效,但感觉非常不自然,我有点相信有更好的方法来实现这一点。

有什么建议吗:)?

编辑:我觉得范围可能是一个不错的解决方案的一部分,例如为锯木厂大楼指定范围,也许有人已经想到了更详细的东西,我现在正在处理这个想法。

【问题讨论】:

  • 我在这里是字面意思,但肯定一座建筑只能属于一个城市......
  • 哦不,建筑物是建筑物的静态表示,所以它可以属于许多城市。另一方面,city_building 确实只能属于一个特定的城市(它有很多通过)
  • 这里有什么问题?您是否正在寻找从 wood_production 前往锯木厂大楼的更便捷方式?
  • 要获取city_building信息,请再次阅读问题

标签: ruby-on-rails


【解决方案1】:

正确,因此您的直通关联是正确的。如果锯木厂的building_id 是固定的,那么您可以添加另一个关联

has_many :sawmills, :through => :city, :source => :city_buildings, :conditions => {:building_id => SAWMILL_BUILDING_ID}

w.sawmills.first.level

edit: has_one :through to a has_many 不起作用

【讨论】:

    猜你喜欢
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2021-03-20
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    相关资源
    最近更新 更多