繁体   English   中英

如何在 Rails 中制作自定义 url 助手?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM