作为一名Rails新手,我几天来一直在努力解决Activeadmin问题,而我却无法弄清楚如何解决它。
由于各种原因,我需要在显示新Invoice对象的表单时构建对象。我有路线
“admin/orders/:order_id/invoices/new" => "admin/invoices#new"
并且需要在显示Invoice表单时构建订单对象。在有人指出ActiveAdmin可以通过设置ActiveAdmin has_many来做到这一点之前,是的,我知道情况确实如此,但鉴于我的模型结构,这不适合这个应用程序(除此之外,并非所有发票都有链接的订单)。
所以,我在我的Invoice模型上设置了after_initialize,如下所示:
after_initialize :set_defaults
def set_defaults
@ordergroup = Ordergroup.new
@ordergroup.order = Order.find(@options[:order_id])
self.ordergroup << @ordergroup
end
Simples。唯一的问题是将参数中的order_id传递给模型。我一直在尝试一系列初始化功能,但无论我做什么似乎都会导致完全的灾难。有人能指出我正确的方向吗?如果这不是Activeadmin,而我直接调用新的Invoice,我可以使用Invoice.new(params),但是使用Activeadmin,这似乎是作为表单函数的一部分自动调用的。
非常感谢任何帮助。
答案 0 :(得分:0)
答案似乎只是跳过所有的after_initialize并初始化麻烦并在Activeadmin中重写新方法
admin/invoice.rb
def new
@invoice = Invoice.new
if params[:order_id]
@invoice.linknew(params[:order_id])
end
end
invoice.rb
def linknew(order_id = {})
@order_id = order_id
@ordergroup = Ordergroup.new
@ordergroup.order = Order.find(@order_id)
self.ordergroup << @ordergroup
end
我花了两天时间才弄明白......