2010-10-12 27 views
3

J'ai actuellement une liste générique qui est générée par ActiveScaffold. À la fin de chaque ligne de la liste, ActiveScaffold ajoute les liens CRUD standard - Afficher, Modifier, Supprimer - pour chaque enregistrement.Substituer show/edit/etc comportement dans ActiveScaffold

Je ne souhaite pas utiliser ActiveScaffold pour ces actions (longue histoire) et j'ai créé mes propres contrôleurs pour gérer cela. J'essaie de contourner ces liens pour pointer vers mes propres contrôleurs, mais je n'arrive pas à comprendre comment passer l'identifiant de l'enregistrement.

Par exemple, que je veux le nouveau lien pour Afficher être /foo/show/[id] - J'ai dans ma configuration ActiveScaffold:

config.show.link.action = "show" 
config.show.link.parameters = {:controller => "foo", :id => ???} 

Je ne sais pas quoi passer dans le paramètre id. J'ai essayé d'utiliser des choses comme: foo_id, ou foo_id, mais le contrôleur ne sait pas ce qu'ils sont. Quand j'utilise: foo_id, par exemple, je viens d'obtenir la chaîne - /foo/show/foo_id.

Mon contrôleur est ci-dessous, mais il n'y a pas grand-chose.

class MessagesController < ApplicationController 

    active_scaffold :messages do |config| 

     config.columns = [:eff_date, :exp_date, :type, :message] 

     config.show.link.action = "show" 
     config.show.link.parameters = {:controller => "show_messages", :id => ??} 

    end 

end 

Je voudrais continuer à utiliser ActiveScaffold pour l'écran de la liste parce que je ne veux pas vraiment avoir à rouler ma propre version de la liste. J'ai trouvé un gars qui posait la même question dans googlegroups mais il n'y avait pas de réponse.

http://www.mail-archive.com/[email protected]/msg00798.html

Edit: Je dois ajouter que ne pas spécifier le paramètre: id ne en fait mettre la valeur par défaut ActiveRecord ID dans le champ, mais il est pas tout à fait celui que je veux - encore une fois, longue histoire ...: (

Répondre

1

bon bien cela est sans doute pas la meilleure solution, mais il est le plus évident

dans mon. « Edit: » J'ai ajouté dans un détail très important que je initialement omis ActiveScaffold mettait automatiquement l'ID dans. l'URL en tant que l'un de l'enregistrement en cours mais mes contrôleurs personnalisés ont effectivement besoin d'un ID différent (une clé étrangère sur le disque, en fait).

La solution - maintenant évidente - était de simplement changer mon contrôleur personnalisé pour utiliser l'ID par défaut qu'il a traversé et changer la requête ActiveRecord pour utiliser cet ID ... d'oh.