在我的部分模板中,有一个名为“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)%>
有这样的方法吗?
答案 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%正确。
希望这有帮助。