[英]How can I make my custom url helpers in rails?
我希望这个自定义 url 助手可以从控制器、视图、测试中访问......以 _url 和 _path 结尾。 此外,它应该有可能在末尾添加参数作为 url 助手。
def reviews(reviewable)
"/reviews/#{reviewable.class}/#{reviewable.id}"
end
reviews_url Book.find(1) # /reviews/Book/1
reviews_path Film.find(3) # /reviews/Film/3
Review.reviewable 是多态的。
配置/路由
get "reviews/:reviewable_type/:reviewable_id" => "reviews#index"
我只是将路线定义为:
resources :books do
resources :reviews, only: [:new, :create, :index]
end
resources :films do
resources :reviews, only: [:new, :create, :index]
end
这将创建路由:
books/:book_id/reviews
films/:film_id/reviews
这是定义嵌套资源的传统 RESTful 方式。 更重要的是,它与Rails 多态路由助手一起工作。
如果需要,您可以使用路由问题来干燥它。
concern :reviewable do
resources :reviews, only: [:new, :create, :index]
end
resources :books, concerns: :reviewable
resources :films, concerns: :reviewable
它为您提供命名的路由助手book_reviews_path(@book)
和film_reviews_path(@film)
。 您还可以使用多态路由助手:
<%= link_to "Reviews for #{@reviewable.title}" [@reviewable, :reviews] %>
...
<%= form_for([@reviewable, @reviewable.review.new]) do %>
...
redirect_to [@reviewable, :reviews], notice: 'Review created'
虽然我的问题很久以前就有人回答了,我还是想根据问题的标题再补充一个答案。 因此,如果您真的想创建自定义 url 和路径助手,这里有一个例子的答案: 生成一个完整的资源路径,只将最后一个资源提供给路由助手
Rails 文档: https : //api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/CustomUrls.html#method-i-direct
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.