Ruby on rails 如何创建一个;编辑";restful资源的url?

Ruby on rails 如何创建一个;编辑";restful资源的url?,ruby-on-rails,rest,Ruby On Rails,Rest,在我的部分模板中,有一个变量名为“resource”,它可能是一个问题或答案 我想建立一个链接来编辑它,但当我使用它时,我不知道它是什么,所以我不能写: <%=link_to 'edit', edit_question_url(resource)%> 或 我想知道是否有这样一种方法,比如“url\u for_edit()”,可以用作: <%=link_to 'edit', url_for_edit(resource)%> 有这样的方法吗?您可以在Appli

在我的部分模板中,有一个变量名为“resource”,它可能是一个问题或答案

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

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


我想知道是否有这样一种方法,比如“url\u for_edit()”,可以用作:

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


有这样的方法吗?

您可以在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
或者通过元编程:

def edit_question_or_answer_url(resource)
  send "edit_#{resource.class.name.underscore.pluralize}_url".to_sym, resource
end
对于第一种方法,如果
resource
无效,应用程序将引发异常。在第二种情况下,仅当
resource
不是资源时才会引发异常

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


希望这有帮助。

您可以尝试
多态url(资源)
前缀为
编辑多态url(资源)

你的答案可以,但太复杂了<代码>多态url要简单得多。还是谢谢你。
def edit_question_or_answer_url(resource)
  send "edit_#{resource.class.name.underscore.pluralize}_url".to_sym, resource
end