2010-06-16 5 views
4

Dans mon modèle partiel, il y a une variable nommée "resource", il peut s'agir d'une question ou d'une réponse.Comment créer une URL de "modification" pour une ressource reposante?

Je veux construire un lien pour modifier, mais quand je l'utilise, je ne sais pas ce qu'elle est, je ne peux pas écrire:

<%=link_to 'edit', edit_question_url(resource)%> 

ou

<%=link_to 'edit', edit_answer_url(resource)%> 

Je me demande s'il y a une telle méthode, dites « url_for_edit() », peut être utilisé comme:

<%=link_to 'edit', url_for_edit(resource)%> 

y at-il une telle méthode?

Répondre

0

Vous pouvez créer une aide dans ApplicationHelper comme ceci:

def edit_question_or_answer_url(resource) 
    return edit_question_url(resource) if resource.kind_of? Question 
    return edit_answer_url(resource) if resource.kind_of? Answer 
    raise ArgumentError.new "unknown resource: #{resource.class.name}" 
end 

Ou par metaprogramming:

def edit_question_or_answer_url(resource) 
    send "edit_#{resource.class.name.underscore.pluralize}_url".to_sym, resource 
end 

Avec la première approche de l'application soulève une exception si resource est pas valide. Dans la seconde, l'exception n'est augmentée que si resource n'est pas une ressource

Je n'ai pas testé ce code, mais je pense qu'il est 100% correct.

Espérons que cela aide.

+0

votre réponse est OK, mais est trop compliqué. 'polymorphic_url' est beaucoup plus simple. Merci tout de même. – Freewind

Questions connexes