簡體   English   中英

活動管理員傳遞參數after_initialize

[英]Active admin passing params after_initialize

作為Rails的新手,我已經為Activeadmin問題苦苦掙扎了幾天,而我只是想不出解決方法。

由於各種原因,當我顯示新的Invoice對象的表單時,我有必要構建一個對象。 我有路線

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

並且需要在顯示“發票”表單時構建訂單對象。 在任何人指出ActiveAdmin可以通過設置ActiveAdmin has_many來做到這一點之前,是的,我知道是這種情況,但是考慮到我擁有的模型結構,這不適合此應用程序(除其他事項外,並非所有發票都具有鏈接順序) )。

因此,我在發票模型上設置了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時,它似乎是作為窗體函數的一部分自動調用的。

任何幫助將不勝感激。

答案似乎只是跳過所有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

我花了兩天的時間才弄明白...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM