代码之家  ›  专栏  ›  技术社区  ›  Einar

Rails RESTful控制器与视图特定控制器

  •  3
  • Einar  · 技术社区  · 14 年前

    这个设计问题需要一点背景,所以请接受我。

    我现在有三个模型是这样的:

    class MyItem < ActiveRecordBase
        has_many :my_list_items
        ...
    
    class MyList < ActiveRecordBase
        has_many :my_list_items
        has_many :my_items, :through => :my_list_items
        ...
    
     class MyListItem < ActiveRecordBase
         belongs_to :my_item
         belongs_to :my_list
         has_many :my_list_item_properties
    
     class MyListItemProperty < ActiveRecordBase
         belongs_to :my_list_item
    

    如你所见 MyListItem 模型不仅仅是一个简单的联接表,它还具有其他属性。

    应用程序中有两个主要视图。一个显示所有 MyItems MyList 糜棱岩 MyListItems 以及相关的 MyItem 对象(通过 ),和内联窗体以创建新的 我的项目 对象和关联 糜棱岩

    现在我有两个选择:

    • 我可以有控制器的方法,以促进例如,一个新的 我的项目 两者都有 MyItemController MyListController

    • 或者我可以从 糜棱岩 视图提交到 我的项目控制器 ,然后必须注意从 在适当的时候。这似乎还需要我为中的每个链接指定一个:controller=>my\u list 糜棱岩 相关视图。这似乎是一种更安静的方法,限制了 我的项目 对象到一个控制器,但它使控制器逻辑有些复杂。

    2 回复  |  直到 8 年前
        1
  •  3
  •   njorden    14 年前

    我也经常和自己讨论这个问题,我想我通常倾向于选择1。作为一种最佳实践,我们通常致力于精简控制器,并寻找将初始化/创建逻辑分解到模型中的方法。在一个完美的世界里,

    我也觉得随着时间的推移,对不同观点的要求会有所不同:“我们希望在这个页面上显示不同的flash消息”。这将是选项2的更多分支。

    在对模型合理的初始化逻辑进行分解之后,或者在控制器中使用一个公共的before#u过滤器,选项1可能会感觉非常干净和干燥。

        2
  •  2
  •   Ben Lee    14 年前

    我在这里的最初倾向是您建议的第一个选项,但是使用lib模块(这两个控制器都包括)来消除围绕MyItems的任何重复代码或逻辑(当然,应该尽可能首先在MyItem模型中进行消除)。这使得代码既简单又易于维护。当您处理像这样复杂的AJAX设置时,代码逻辑简单性的好处大于严格RESTful方法的好处。