Rails:使''show'视图和'edit'视图匹配

时间:2011-03-31 18:50:11

标签: ruby-on-rails dry

使用Rails 2.3.5,Ruby 1.8.7。

是否有任何插件可以让我的“节目”和“编辑”以及“新”页面具有相同的外观和感觉?我希望能够做以下类型的事情。现在,如果我向模型中添加一个字段,我必须将它添加到edit.html.erb和view.html.erb中。我希望能够相当广泛地指定外观,但我希望“编辑”和“显示”看起来相同(两者之间的例外,也许,但不是很多。)

有没有DRY工具?

基本上,我希望能够使我的“edit.html.erb”成为:

<% plugin_form_helper_for @model do |form_helper| %>
  <%= render :partial => 'common_look', :locals => {:helper => form_helper} %>
<% end %>

和show.html.erb是:

<% plugin_show_helper_for @model do |show_helper| %>
  <%= render :partial => 'common_look', :locals => {:helper => show_helper} %>
<% end %>

然后“form_helper”和“show_helper”将实现相同的接口(具有一些分支能力,使两者的布局/外观略有不同。)

3 个答案:

答案 0 :(得分:3)

有一个插件!

https://github.com/codez/dry_crud

它非常灵活..只需确保使用正确版本的rails 2.3

答案 1 :(得分:2)

我使用自定义输入/显示辅助函数来执行您所描述的内容。举一个简单的例子,您可以使用这样的函数:

<%= my_field_helper(:model, :field_name) %>

在控制器中,您将@context变量设置为:show:edit。帮助程序代码包含@context上的开关,如果是:edit,则输出类似

的内容
<li>
    <label>Translation of Field</label>
    <input name="model[field_name]" value="???" />
</li>

(可能在所有控制器中使用通用@model变量,因此可以在所有页面上使用相同的功能 - 或者将@my_model传递给函数本身)但是@context时是:show(或者默认情况下),它会输出如下内容:

<li>
    <span class="label">Translation of Field</label>
    <span class="value">Field Value</span>
</li>

现在您可以使用相同的确切代码来显示所有字段!您可能希望将该代码拉出到部分代码中,因此您可以轻松地将其包装在一个表单中进行编辑,但不能用于显示,但是关键位可以完成 - 如果您需要添加/移动/删除字段,只有一个地方你必须这样做。

希望这有帮助!

答案 2 :(得分:0)

在_form.html.erb中包含该代码片段,然后在类似show.html.erb的常见部分中调用它

然后在你的控制器中,点显示并编辑到相同的部分(show.html.erb)或类似的东西。