0

我是 Rails 的新手。我希望应用 2 次覆盖,以改变 Promotions 对象在其新建和编辑视图中的显示。下面列出了覆盖。两种覆盖都可以自行正常工作。

但我不知道如何将一个覆盖应用到新视图,然后将第二个覆盖应用到编辑视图。

如何对每个新建和编辑视图应用不同的覆盖?

目前我的 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"
 )

这些覆盖当前直接位于相同的位置。

4

1 回答 1

0

新操作和编辑操作有不同的表单。两者都包括部分表单,如新视图编辑视图中所示。

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

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

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

  1. 检查表单方法是 POST 还是 PUT/PATCH。如果它是发布的,则该表单用于创建操作(即从新的),或者如果它是 PUT/PATCH,它用于更新(编辑)。

  2. 检查是否@promotion持续存在。如果是持久化的,就是一个编辑动作,否则就是一个新动作。

您可以在新的部分中进行这些检查并呈现适当的内容。

于 2014-05-27T17:14:40.890 回答