Ruby on rails Rails-抽象/共享视图

Ruby on rails Rails-抽象/共享视图,ruby-on-rails,model-view-controller,Ruby On Rails,Model View Controller,我有一些非常相似的东西。事实上,它们使用STI并将所有数据存储在数据库的同一个表中。目前,每次我添加一个特性或修复一个bug时,我都要在3个不同的地方进行更新,所以我想让我的代码干一点。最常见的代码重复出现在视图中。我见过有人使用render:template=>'shared/something'来呈现他们的公共视图,问题是,我有很多这样的视图,但只针对一个特定对象(发货),因此,我更喜欢像render:template=>“装运/共享/某物”或render:template=>“抽象装运/某

我有一些非常相似的东西。事实上,它们使用STI并将所有数据存储在数据库的同一个表中。目前,每次我添加一个特性或修复一个bug时,我都要在3个不同的地方进行更新,所以我想让我的代码干一点。最常见的代码重复出现在视图中。我见过有人使用
render:template=>'shared/something'
来呈现他们的公共视图,问题是,我有很多这样的视图,但只针对一个特定对象(发货),因此,我更喜欢像
render:template=>“装运/共享/某物”
render:template=>“抽象装运/某物”
。但更重要的是,如果需要,我希望任何实际的类都能够覆盖模板


你们有什么建议吗?非常感谢您的回答

inherit\u视图的
plugin可能完成以下任务:。我以前成功地使用过它

然后,您可以为需要渲染装运的所有控制器创建一个公共基本控制器类,并在该基本控制器的“视图”文件夹中创建任何公共模板,在各个控制器的“视图”文件夹中创建任何特定覆盖。

类(至少是模型)不知道或不应该知道它们的显示方式。这是MVC模式提供的关注点分离的基础

我想我应该试试这样:

对所有STI型号使用一个控制器,
ShipmentsController
或类似产品。除了看起来是一件合乎逻辑的事情外,你所有的观点都会在同一个地方结束,这应该会有所帮助

至于视图,一个“main”视图用于公共部分,一个partial视图用于每一组子类特定的字段如何?在您的视图中使用
案例
,或者更干净地使用helper方法,比如

def partial_name_for_subclass(obj)
  if obj.is_a?(CrudeOilShipment) # or kind_of? or test the type column or use respond_to?
    'crude_oil_shipment'
  # etc
  end
end

干燥器,考虑使用惯例(Rails喜欢约定):

@shipping.class.name.downcase,:locals=>{:item=>@shipping}%>
每个子类都有一个分部


希望这能有所帮助/有意义…

谢谢,这看起来正是我需要的!
<%= render :partial => @shipment.class.name.downcase, :locals => { :item => @shipment } %>