我有一个控制器,它有两个动作:“show”、“show_modify”。它们有非常相似但略有不同的视图,即 show_modify 有不同的div
类,有额外的链接/按钮等等。
从我所看到的情况来看,有几种方法可以在 Rails 中解决这个问题:
为两者制作一个模板,然后在里面添加条件:
<% if param[:action]=="show_modify"> <% ... %> <% end %>
然而有很多不同,这看起来很丑陋和重复,这也是某种违反政教分离的行为(我不是 MVC 专家......)
部分方式:为每个显示不同的元素创建两个部分,每个操作一个。视图看起来像这样:
# show_modify render :partial '_general_stuff' render :partial => '_blabla_show_modify' # show render :partial => '_general_stuff' render :partial => '_blabla_show' `
然而这会违反 DRY,因为有重叠的元素。我可以继续制作更多的子部分,但基本上都是海龟——如果你不想重复自己,最终你必须去 if/else。
与当地人的部分:
if show render :partial = '_blabla', :locals => {:bckgrnd => 'blue', :button => 'yes' ....}
但这是另一个很多-o-ifs 解决方案....
还有更好的选择吗?content_for
也许?我有点像 Rails 菜鸟+,所以我可能完全错过了一些东西....