2010-09-23 4 views
0

J'utilise un contrôleur hérité pour une classe abstraite. J'essaie d'éviter les actions prioritaires dans tous les contrôleurs descendants. Comment est-ce que je pourrais trouver le nom de la clef où le tableau des valeurs de forme vit? Par exemple:Est-il possible de détecter la clé pour le tableau dans le hachage des params Rails?

La classe maître utilise actuellement cette mise à jour des lignes

if @parent.update_attributes(params[:parent]) 

Chaque classe qui hérite de lui a son propre nom qui ne sera pas reconnu

<input type="text" value="" name="child[title]" id="child_title"> 

Comment puis-je détecter dynamiquement le: nom que je dois utiliser dans les params [] pour chaque formulaire? Je me contenterais pour quelques conseils form_for pour ma partie qui gère modifier et nouveau:

form_for @parent do |f| 

J'ai essayé ce qui est en dessous, mais je ne peux pas à le faire PUT. Quand je l'édite, elle fait une nouvelle rangée:

form_for @child, :as => :parent, :url => child_path do |f| 

Répondre

1

Merci pour rien les gars (sauf Cryo bien sûr) J'ai toujours eu le nom de la clé dans ma variable d'instance Je ne savais juste pas comment la sortir et la transformer en le symbole dont j'avais besoin pour le hash des params. est comment je l'ai fait:

@element.update_attributes(params[@element.class.name.downcase.to_sym]) 

De cette façon, je peux créer une ressource, l'hériter d'un contrôleur parent, utiliser la configuration de formulaire par défaut et recycler la logique depuis le contrôleur parent.

0

Je n'ai pas vraiment perdu le sens de ce que vous me demandez. Je vous demande pardon si ma réponse n'est pas pertinente.

1. Comme je l'ai compris, la première chose que vous cherchez est de savoir comment mapper la clé particulière dans params hash avec le contrôleur descendant réel qui a fait une demande de post/put. Vous pouvez le faire en examinant « nom_contrôleur » quelque chose comme ça:

keys = { 'ChildController1' => :child1, 'ChildController1' => :child2, }

key = key[controller.controller_name] 
@model.update_attributes(params[key]) 

2.Dans vous devez effectuer une demande de vente ajouter :html => {:method => :put} comme la dernière méthode PARAM form_for d'aide FormBuilder (form_for @resource, :url => {resource_path(@resource)}, :html => {:method => :put}

+0

Vous avez à peu près compris ce que je demandais. Ce que vous avez suggéré fonctionnerait, mais c'est plutôt fragile parce que je devrais maintenir un hachage d'enfants. J'ai besoin d'une méthode qui m'aiderait à gratter la clé du tableau généré par une forme de rails. J'essaye de faire ceci donc je n'ai pas besoin d'utiliser la méthode: method =>: put et: method =>: poster en deux partiels séparés ou me répéter dans les contrôleurs. –

Questions connexes