web-dev-qa-db-fra.com

Rails: activeadmin écrasant l'action de création

J'ai une ressource activeadmin qui a une relation d'appartenance_à: utilisateur.

Lorsque je crée une nouvelle instance du modèle dans l'administrateur actif, je souhaite associer l'utilisateur actuellement connecté à l'utilisateur qui a créé l'instance (des éléments plutôt standard que j'imagine).

Alors ... je l'ai eu avec:

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

Cependant;) je me demande simplement comment cela fonctionne? J'espérais juste qu'attribuer la variable @item à l'utilisateur puis appeler super fonctionnerait (et c'est le cas). J'ai aussi commencé à regarder à travers la gemme mais je ne pouvais pas voir comment cela fonctionnait réellement.

Tous les indicateurs seraient formidables. Je suppose que c'est quelque chose que InheritedResources vous a donné?

Merci!

47
patrickdavey

J'ai rencontré une situation similaire dans laquelle je n'avais pas vraiment besoin de redéfinir complètement la méthode create. Je voulais vraiment seulement injecter des propriétés avant de sauvegarder, et seulement sur create; très semblable à votre exemple. Après avoir lu la source ActiveAdmin, j'ai déterminé que je pouvais utiliser before_create pour faire ce dont j'avais besoin:

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

Une autre option:

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

Vous avez raison, administrateur actif, utilisez InheritedResources, tous les autres outils que vous pouvez voir à la fin de la page .

2
zolter

Selon le code source AA cela a fonctionné pour moi:

controller do
  def call_before_create(offer)
  end
end
0
justinsAccount