Ruby on rails Rails-抽象/共享视图
我有一些非常相似的东西。事实上,它们使用STI并将所有数据存储在数据库的同一个表中。目前,每次我添加一个特性或修复一个bug时,我都要在3个不同的地方进行更新,所以我想让我的代码干一点。最常见的代码重复出现在视图中。我见过有人使用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=>“抽象装运/某
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 } %>