如何在视图和控制器级别处理rails 3模型关系?

时间:2011-12-02 23:32:35

标签: ruby-on-rails ruby-on-rails-3 user-interface

我现在正在进行一个项目,这确实是一个非常大的数据模型。我试图找出处理模型间关系的最佳方法。

为了简洁起见:

Car
  has_many :passengers
  has_many :items

Team
  has_one :head_coach
  has_many :coaches
  has_many :players
  belongs_to :owner

所以从展示页面我会看到谁在车里以及车里有什么物品。我有一些同事认为我们应该有一个名为manage的控制器操作,他们会点击显示页面上的链接来管理其他模型之间的关系

所以Team控制器会有这个

class TeamController < ApplicationController
  # ... magic ...
  def manage_players
     @signed_players = Player.signed_players
     @free_agents    = Player.free_agents
  end
end

manage_players视图只会链接到相应控制器上的实际RESTful操作以删除关系等...

任何人都有关于如何实现这一目标的想法?

1 个答案:

答案 0 :(得分:1)

这是一种过于复杂的方法,好消息是,它比你想象的要简单。

省去一些麻烦。您问题的快速回答是使用nested resources:您可以使用单个表单处理Car以及所有相关的乘客/物品,或Team及其教练,玩家,等

您所描述的操作/视图只是edit / Car上的Team操作。 manage动作名称是一个不错的主意,但是你真正采取的行动是编辑(没有什么特别的,你所描述的是什么),所以为什么要混淆当默认调用时发生的事情它edit

如果你想要一个利用嵌套路线的实例,请查看rpglogger.com(这是我的网站)。当您使用它时,请注意地址栏中的路线/ URL。

它也是open source。与您的问题特别相关的是:

  • 请参阅routes.rb file,并注意我如何在sections上定义资源两次 - 这实际上给了我两个不同版本的路径 - 一个是作用于LogBook的,另一个是作用于对象的在一节
  • 查看world_object_form.hamlhaml也摇滚,FYI),这是我的newedit形式 - 但它很短,相当简单,而且相当容易鉴于它的作用,阅读/未定。