0

作为一个 Rails 新手,我已经为 Activeadmin 问题苦苦挣扎了几天,我就是不知道如何解决它。

由于各种原因,在显示新 Invoice 对象的表单时,我有必要构建一个对象。我有路线

“admin/orders/:order_id/invoices/new" => "admin/invoices#new"

并且需要在显示 Invoice 表单时构建 order 对象。在任何人指出 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

简单的。唯一的问题是将参数中的 order_id 传递给模型。我一直在尝试一系列初始化函数,但无论我做什么似乎都会导致彻底的灾难。有人能指出我正确的方向吗?如果这不是 Activeadmin,并且我直接调用新的 Invoice,我可以执行 Invoice.new(params),但使用 Activeadmin,这似乎是作为表单函数的一部分自动调用的。

任何帮助将不胜感激。

4

1 回答 1

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

我花了两天时间才弄明白...

于 2013-09-21T23:32:28.207 回答