【问题标题】:Edit in nested routes with no paths在没有路径的嵌套路由中编辑
【发布时间】:2011-12-25 18:26:25
【问题描述】:

使用:Rails 3.1.1 和 Friendly_id 用于 url。

我认为这应该很容易,但我想不通。

我有一个如下所示的嵌套路由:

  resources :pages, :path => '' do
    # WHAT_DO_I_TYPE_HERE
    resources :products, :except => [:index], :path => '' do
        member do
            post 'broken_link'
        end
    end    
  end

未标记的 (#) 行是我要弄清楚的那一行。基本上我的网址是这样的:

domain.com/page_name/product_name/(通过friendly_id),例如domain.com/music/mp3/.

我想使用 url domain.com/music/edit 来编辑关于音乐的页面。

现在,如果我输入: 一种。 <blank> # 即什么都没有...将该行留空 --- 我收到错误“找不到 id=edit 的产品”,这在某种程度上是有道理的。它试图找到一个名为编辑的产品,而不是方法编辑。所以我尝试 湾。匹配“编辑”,:控制器=>“页面”,:动作=>“编辑” --- 这给了我错误“找不到没有 ID 的页面”,我想这也是有道理的。

那么我应该写什么来告诉路由在检查产品名称之前检查编辑方法?

【问题讨论】:

    标签: ruby-on-rails routes nested friendly-id


    【解决方案1】:

    我之前也遇到过这个问题... 你可以做一些事情来实现你想要的 url 路由......

    首先,使用您那里的代码,我建议查看命令行中的 rake routes 为与 page_path 或 page_product / product_page 路径相关的任何内容生成的内容,并查看它捕获的 url + 他们命名的路线。

    如果它不是你想要的......那么你可以尝试放置:

    get '/:id' => 'products#show'
    

    代替你的# WHAT_DO_I_TYPE_HERE

    不过,您可能需要对此进行限制(请参阅底部的链接),以便您仍然可以拥有 /mypage/editmypage/new 等 ...

    您真正想要做的是设置如下所示的路线:

    match '/:page_id/:id' => 'products#show', :as => 'product'
    

    这应该在这些路线之上的某个地方,并且可以通过product_show_path 获得。这假设您使用的是标准的 has/belongs to 关系。

    您可以将:as => 'product' 部分重命名为您想要的任何名称,

    例如::as => 'public_product'

    然后更新您的链接以在需要的地方显示 public_products_path

    在您的 products#show 操作中,您应该执行以下操作:

    @product = Product.find(:id => params[:id], :page_id => params[:page_id])
    

    您还可以考虑对路线施加限制... 我在这里整理了一个 Gist 供我自己参考,可能对您有用。 https://gist.github.com/1908782

    另外,我遇​​到了另一个问题的答案,它也可能对您有所帮助...https://stackoverflow.com/a/5443829/308701

    希望在某种程度上有所帮助:D

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      相关资源
      最近更新 更多