Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails: activeadmin overriding create action

I have an activeadmin resource which has a belongs_to :user relationship.

When I create a new Instance of the model in active admin, I want to associate the currently logged in user as the user who created the instance (pretty standard stuff I'd imagine).

So... I got it working with:

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

However ;) I'm just wondering how this works? I just hoped that assigning the @item variable the user and then calling super would work (and it does). I also started looking through the gem but couldn't see how it was actually working.

Any pointers would be great. I'm assuming this is something that InheritedResources gives you?

Thanks!

like image 750
patrickdavey Avatar asked Dec 03 '12 01:12

patrickdavey


2 Answers

I ran into a similar situation where I didn't really need to completely override the create method. I really only wanted to inject properties before save, and only on create; very similar to your example. After reading through the ActiveAdmin source, I determined that I could use before_create to do what I needed:

ActiveAdmin.register Product do   before_create do |product|     product.creator = current_user   end end 
like image 57
Karl Wilbur Avatar answered Oct 06 '22 00:10

Karl Wilbur


Another option:

def create   params[:item].merge!({ user_id: current_curator.id })   create! end 
like image 44
Kori John Roys Avatar answered Oct 05 '22 22:10

Kori John Roys