代码之家  ›  专栏  ›  技术社区  ›  zanona oldmanwiggins

Rails RESTful路由:覆盖参数[:id]或参数[:model_id]默认值

  •  0
  • zanona oldmanwiggins  · 技术社区  · 15 年前

    假设我有一条路线:

    map.resource :user, :as => ':user', :shallow => true do |user|
        user.resources :docs, :shallow => true do |file|
            file.resources :specs
        end
    end
    

    /:用户/文档

    /文档/:文档id/规格

    params[:doc_id] 因为有时候 params[:id] 有时是 参数[:doc_id] 在这种情况下,我希望总是调用一个特定的名称,这样我就不必为我的过滤器创建两个不同的声明。

    http://dev.rubyonrails.org/ticket/6814

    基本上,这使您能够在map.resources上添加一个:key参数,这样您就可以定义以后引用它的方式,这样我们就可以有:

    map.resources :docs, :key => :doc ...
    

    所以我总是会打电话给她 params[:doc] 相反

    但实际上这个补丁有点旧(3年了) 所以我想知道我们是否没有更新的、已经内置的rails来完成这项任务?

    附笔 Parameters: {"doc_id"=>"6"} Parameters: {"id"=>"6"} 总是

    1 回复  |  直到 15 年前
        1
  •  0
  •   bensie    15 年前

    一种在不编写完全自定义路由的情况下使参数更友好的方法是

    # docs_controller.rb
    def show
      @doc = Doc.find(params[:doc].to_i)
    end
    
    # doc.rb
    def to_param
      [ id, permalink ].join("-")
      # assumes you're storing a permalink formatted version of the name of your doc
    end
    
    # routes.rb
    map.resources :docs
    

    这将为您提供类似example.com/docs/234-the-name-of-your-doc的URL