【问题标题】:'method not found' after using controller decorator使用控制器装饰器后“找不到方法”
【发布时间】:2015-07-21 19:30:20
【问题描述】:

我正在尝试向 spree 管理页面添加一项功能以重新发送发货电子邮件。

我收到了这个错误,

ActionView::Template::Error (undefined method `resend_shipment_email_admin_order_url' for #<#<Class:0x0000000668cf80>:0x00000006683700>):
    16:               </ul>
    17:             
    18:   <%= button_link_to Spree.t('Resend order email'), resend_admin_order_url(@order), method: :post, icon: 'email' %>
    19:   <%= button_link_to Spree.t('Resend shipment email'), resend_shipment_email_admin_order_url(@order), method: :post, icon: 'email'
 %>
    20:   </div>
    21:           <% end %>
    22:         </div>

这是我的装饰器,app/controllers/spree/orders_controller_decorator.rb,

Spree::Admin::OrdersController.class_eval do

  before_action :load_order, only: [:edit, :update, :cancel, :resume, :approve, :resend, :resend_shipment_email, :open_adjustments, :close_adjustments, :cart]

  def resend_shipment_email
    if @order.shipment_state == "shipped"
      ShipmentMailer.shipped_email(@order.shipments.last.id).deliver
      flash[:success] = "Shipment Email Resent"
      redirect_to :back
    else
      flash[:error] = "Cannot send shipment email. Order not marked as shipped."
      redirect_to :back
    end
  end

end

这是我的路线,

  namespace :admin do
    resources :orders, except: [:show] do
      member do
        post :resend_shipment_email
      end
    end
  end

这是视图覆盖,

Deface::Override.new(:virtual_path => 'spree/admin/shared/_content_header',
  :name => 'add_resend_shipment_email_button_to_spree_admin',
  :insert_bottom => "[data-hook='toolbar'], #toolbar[data-hook]",
  :text => "
  <%= button_link_to Spree.t('Resend order email'), resend_admin_order_url(@order), method: :post, icon: 'email' %>
  <%= button_link_to Spree.t('Resend shipment email'), resend_shipment_email_admin_order_url(@order), method: :post, icon: 'email' %>
  "
)

这是一个来自 rake 路由的 sn-p,

resend_shipment_email_admin_order POST   /admin/orders/:id/resend_shipment_email(.:format) admin/orders#resend_shipment_email
                               resend_admin_order POST     /admin/orders/:id/resend(.:format)                                          spree/admin/orders#resend

【问题讨论】:

    标签: ruby-on-rails spree deface


    【解决方案1】:

    我必须做的是修复我的路线文件,以便 spree 可以识别,

    Spree::Core::Engine.routes.draw do
        namespace :admin do
          resources :orders, except: [:show] do
            member do
              post :resend_shipment_email
            end
          end
        end
      end
    

    【讨论】:

      猜你喜欢
      • 2014-04-10
      • 2020-01-11
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      • 2015-12-03
      • 2014-01-14
      • 1970-01-01
      相关资源
      最近更新 更多