代码之家  ›  专栏  ›  技术社区  ›  Chiara Ani

如何在Rails中创建自定义的URL帮助程序?

  •  0
  • Chiara Ani  · 技术社区  · 6 年前

    我希望可以从控制器、视图、测试中访问此自定义URL帮助程序…以URL和路径结尾。此外,它还可以在末尾添加参数作为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.review是多态的。

    配置/路由

    get "reviews/:reviewable_type/:reviewable_id" => "reviews#index"
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   max Mike Williams    6 年前

    我将把路线定义为:

    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
    

    这是定义 nested resources . 更重要的是,它与 Rails polymorphic route helpers .

    如果需要,可以使用路由问题来干燥它。

    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'