63

我有一个 activeadmin 资源,它有一个 belongs_to :user 关系。

当我在活动管理员中创建模型的新实例时,我想将当前登录的用户关联为创建实例的用户(我想这是非常标准的东西)。

所以......我得到了它的工作:

controller do
  def create
    @item = Item.new(params[:item])
    @item.user = current_curator
    super
  end 
end 

但是 ;) 我只是想知道这是如何工作的?我只是希望将@item 变量分配给用户然后调用 super 会起作用(确实如此)。我也开始浏览宝石,但看不到它实际上是如何工作的。

任何指针都会很棒。我假设这是 InheritedResources 给你的东西?

谢谢!

4

4 回答 4

126

我遇到了类似的情况,我真的不需要完全覆盖 create 方法。我真的只想在保存之前注入属性,并且只在创建时注入;与您的示例非常相似。在阅读了 ActiveAdmin 源代码后,我确定我可以用before_create它来做我需要的事情:

ActiveAdmin.register Product do
  before_create do |product|
    product.creator = current_user
  end
end
于 2014-04-07T18:33:20.510 回答
14

另外的选择:

def create
  params[:item].merge!({ user_id: current_curator.id })
  create!
end
于 2013-10-09T16:13:44.020 回答
2

您是正确的活跃管理员使用InheritedResources,您可以在页面末尾看到的所有其他工具。

于 2012-12-03T04:10:58.307 回答
-1

As per the AA source code this worked for me:

controller do
  def call_before_create(offer)
  end
end
于 2014-08-17T01:47:43.277 回答