Rails:activeadmin重写创建操作

时间:2012-12-03 01:01:48

标签: ruby-on-rails activeadmin inherited-resources

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

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

所以...我得到了它:

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

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

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

谢谢!

4 个答案:

答案 0 :(得分:100)

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

ActiveAdmin.register Product do
  before_create do |product|
    product.creator = current_user
  end
end

答案 1 :(得分:12)

另一种选择:

def create
  params[:item].merge!({ user_id: current_curator.id })
  create!
end

答案 2 :(得分:2)

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

答案 3 :(得分:0)

根据AA source code这对我有用:

controller do
  def call_before_create(offer)
  end
end