如何为restful资源创建“编辑”网址?

时间:2010-06-16 11:02:00

标签: ruby-on-rails rest

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

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

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

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

我想知道是否有这样的方法,比如说“url_for_edit()”,可以用作:

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

有这样的方法吗?

2 个答案:

答案 0 :(得分:9)

您可以尝试以polymorphic_url(resource)为前缀edit_polymorphic_url(resource) http://api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html

答案 1 :(得分: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

或通过元编程:

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

使用第一种方法,如果resource无效,则应用程序会引发异常。在第二个例外中,仅当resource不是资源

时才会引发异常

我没有测试此代码,但我认为100%正确。

希望这有帮助。