簡體   English   中英

覆蓋嵌套資源的 Rails 路由助手

[英]Overriding Rails route helpers for nested resource

假設我有一個帶有評論和帖子的經典博客應用程序。 在這個應用程序中,評論總是嵌套在帖子下。

GET /posts/:posts_id/comments/:id ...

我想以某種方式覆蓋 URL 助手,以便我可以將它們視為評論不是嵌套資源。

要求

評論應該只使用嵌套的 url:

/posts/:posts_id/comments/:id

我應該能夠做到:

comments_path @comment

redirect_to @comment

我試過

我可以讓 Rails 生成沒有前綴的路由助手:

resources :posts
scope '/posts/:post_id' do
  resources :comments
end

但是comments_path(@comment)仍然會給我ActionController::UrlGenerationError因為post_id沒有設置。

我當然可以手動創建我自己的輔助方法,但如果可能的話,我希望 rails 生成輔助方法。

根據我的理解,路由助手是ActionDispatch::Routing::UrlFor的貼面。 我一直在研究ActionDispatch::RoutingPolymorphicRoutes但我找不到生成的助手如何將模型實例“序列化”為參數。

是否可以創建一個模型方法,當路由助手將評論資源轉換為參數時使用?

我在想一些類似於to_param的東西。

我之前也有過類似的需求,我所做的只是在我的ApplicationController創建一個自定義的輔助方法,如下所示:

class ApplicationController < ActionController::Base
  ...

  def comment_path(comment)
    post_comment_path(comment.post, comment)
  end

  helper_method :comment_path
end

這樣,您仍然可以在視圖、助手、控制器等中使用comment_path ,但它使用完整的嵌套路由。

我不知道是否可以用 Rails 內部來完成,但很簡單,我認為這不值得麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM