首先将_form.html.erb的不同覆盖应用于New,然后应用Spree Rails中的Edit视图

时间:2014-05-26 16:25:24

标签: ruby-on-rails ruby views spree deface

我是Rails的新手。我希望应用2个覆盖,以便在“新建”和“编辑”视图中更改“促销”对象的显示。覆盖列表如下。两个覆盖都可以自己正常工作。

但我无法弄清楚如何将一个覆盖应用于“新建”视图,然后将第二个覆盖应用于“编辑”视图。

如何对New视图和Edit视图中的每一个应用不同的覆盖?

目前我的Promotion对象已成功保存,但其值不会显示在编辑视图中。此外,编辑视图的呈现方式与“新建”视图相同,这是错误的。

代码:

使用Spree Deface,我覆盖促销表单(_form.html.erb)以产生一个新的(创建)视图,如下所示:

 Deface::Override.new(:virtual_path => "spree/admin/promotions/_form",
                 :name => "example-3",
                 :replace => "div.row",
                 :partial => "shared/new_promotion"
 )

在第二次覆盖中,我覆盖了_form.html.erb:

 Deface::Override.new(:virtual_path => "spree/admin/promotions/_form",
                 :name => "example-3",
                 :replace => "div.row",
                 :partial => "shared/uploadcsvfile"
 )

这些覆盖目前直接相同。

1 个答案:

答案 0 :(得分:0)

新操作和编辑操作有单独的表单。两者都包含部分形式,如new viewedit view

所示

您希望根据您是在新视图还是编辑视图中显示不同的内容,因此您必须确定以下内容:

  

根据我在表单中知道的信息,如何确定表单是从编辑表单中还是从新表单中提取的。

我可以看到两种简单的可能性:

  1. 检查表单方法是POST还是PUT / PATCH。如果是帖子,则表单用于创建操作(即来自new),或者如果它是PUT / PATCH,则用于更新(编辑)。

  2. 检查@promotion是否持久存在。如果它是持久的,则为编辑操作,否则为新操作。

  3. 您可以在新的部分中执行这些检查并呈现相应的内容。