我正在使用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。
Nevermind,原因是一个愚蠢的语法错误: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