开发者

How to create an "edit" url for a restful resource?

开发者 https://www.devze.com 2023-01-03 11:25 出处:网络
In my partial template, there is a varible named \"resource\", it may be a que开发者_如何学运维stion or an answer.

In my partial template, there is a varible named "resource", it may be a que开发者_如何学运维stion or an answer.

I want to build a link to edit it, but when I use it, I don't know what it is, so I can't write:

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

or

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

I wonder if there is such a method, say "url_for_edit()", can be used as:

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

Is there such a method?


you can try polymorphic_url(resource) prefixed with edit_polymorphic_url(resource) http://api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html


You can create a helper in ApplicationHelper like this:

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

Or by metaprogramming:

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

With the first approach the application raises an exception if resource isn't valid. In the second the exception is only raised if resource isn't a resource

I didn't test this code, but I think is 100% correct.

Hope this helps.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号