我有一个activeadmin资源,它有一个belongs_to:用户关系。
当我在活动管理员中创建模型的新实例时,我想将当前登录的用户关联为创建实例的用户(我想象的非常标准的东西)。
所以...我得到了它:
controller do
def create
@item = Item.new(params[:item])
@item.user = current_curator
super
end
end
但是;)我只是想知道这是如何工作的?我只是希望将@item变量分配给用户然后调用super将起作用(并且确实如此)。我也开始浏览宝石,但看不出它是如何工作的。
任何指针都会很棒。我假设这是InheritedResources给你的东西吗?
谢谢!
答案 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