【问题标题】:Overriding a view in Spree with deface: how do I add inputs and their current values?用污损覆盖 Spree 中的视图:如何添加输入及其当前值?
【发布时间】:2012-12-09 17:14:33
【问题描述】:

我正在尝试向其中一个 Spree 管理视图中已存在的表单添加输入。这是覆盖文本(我剪掉了一些以显示为中心且嘈杂的杂乱无章):

new_html = "
  <div id='neato_new_field'>
    <p id='product_display_value'>
      <label for='display_value'>Display Value</label>
      <br>
      <input type='text' name='product[display_value]' size='30' id='product_display_value' value=''>
    </p>
  </div>"

Deface::Override.new(:virtual_path  => "spree/admin/products/_form",
                     :insert_after => "div.clearfix",
                     :text          => new_html,
                     :name          => "add_display_value")

我需要知道如何做的是在输入上设置“值”属性的值,以便在呈现此视图时获取该对象上的当前内容。

我尝试将 value='#{@product.display_value}' 放在那里,但它抱怨 @product 为零。我什至可以使用这样的插值来获取 display_value 吗?这种破坏是在控制器尝试渲染之前还是之后完成的?

我现在想知道如何解决这个问题。我是否必须从已经存在的 html 中删除产品 ID,使用它来加载产品,然后将那个值放在那里?我真的希望我错过了一些基本的东西,这使得解决这个问题变得微不足道:P 很多 Spree 定制都是这种情况——一开始不清楚如何做,但一旦我弄清楚了出来,实现我的自定义很容易......

谢谢, jd

【问题讨论】:

    标签: ruby-on-rails spree deface


    【解决方案1】:

    一旦我理解了答案,答案就相当简单了。

    我没有将 :text => 用于一些随机的 html 标记,而是指出了一个部分,因此可以在任何模板视图中获得所有简洁的行为——尤其是范围内的变量。

    最终解决方案如下所示:

    Deface::Override.new(:virtual_path => "spree/admin/products/_form",
                         :insert_after => "div.clearfix",
                         :partial      => "partials/admin",
                         :name         => "add_display_value")
    

    和部分:

    <div>
      <%= f.field_container :display_value do %>
        <%= f.label :display_value, t(:display_value) %>
        <br>
        <%= f.text_field :display_value, :size => 30, :value => @product.display_value %>
      <% end %>
    <div>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多