2010-06-16 78 views
4

在我的部分模板中,有一个名为“resource”的变量,它可能是一个问题或答案。如何创建一个restful资源的“编辑”网址?

我想建立一个链接编辑它,但是当我使用它,我不知道它是什么,所以我不能写:

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

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

我不知道是否有这样的方法,说:“url_for_edit()”,可作为:

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

有没有这样的方法?随着应用程序引发的异常,如果resource无效,第一种方法

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

回答

0

你可以这样创建ApplicationHelper一个帮手:

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 

或者通过元编程。在第二个例外是只有当resource不是资源

我没有测试这个代码,但我认为是100%正确的。

希望这会有所帮助。

+0

你的答案是确定的,但太复杂polymorphic_url(resource)。 'polymorphic_url'要简单得多。非常感谢。 – Freewind 2010-06-16 12:52:28