4

我正在使用 Rails Administrate 并希望覆盖new控制器上的操作。文档表明这很简单。但是,应用程序似乎忽略了我的覆盖并直接进行渲染new.html.erb,而不是通过我对new方法的覆盖:

控制器:

class MyOrderController < Administrate::ApplicationController

    def valid_action?(name, resource = resource_class)
      %w[edit destroy].exclude?(name.to_s) && super
    end

    def new
      @orders = Order.find_by(property: params[:property])
    end
end

看法:

<div>
<%= @orders.each { |order| %>
  <%=  order.id  %>
<% } %>
</div>

特别是,当转到 时/orders/new,应用程序不会new首先执行我的自定义操作,从而导致错误,因为 @orders 为 nil。

4

1 回答 1

0

没关系,原因是一个愚蠢的语法错误:end语句在错误的位置:

module MyModule do
  class MyOrderController < Administrate::ApplicationController

    def valid_action?(name, resource = resource_class)
      %w[edit destroy].exclude?(name.to_s) && super
    end
  
  end <-- in wrong place

    def new <-- outside the scope of Controller 
      @orders = Order.find_by(property: params[:property])
    end
  end
于 2022-01-20T14:59:36.047 回答