在没有路径的嵌套路由中编辑

时间:2011-11-09 23:26:59

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

使用:Rails 3.1.1和Friendly_id for url' s。

我认为这应该相当容易,但我无法弄清楚。

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

  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' s),例如domain.com/music/mp3 /.

我想使用网址domain.com/music/edit编辑有关音乐的页面。

现在,如果我输入: 一个。 <blank>#即没有......将该行留空 ---我收到错误&#34;无法找到ID = edit&#34;这在某种程度上是有道理的。它试图找到一个名为edit的PRODUCT而不是方法编辑。所以我试试 湾匹配&#39;编辑&#39;,:controller =&gt; &#39; pages&#39;,:action =&gt; &#39;编辑&#39; ---这给了我错误&#39;找不到没有ID的页面&#39;我想这也是有道理的。

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

1 个答案:

答案 0 :(得分:0)

我之前遇到过这个问题...... 您可以采取一些措施来实现您想要的网址路由......

首先,根据您的代码,我建议您查看命令行中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获得。这假设您使用标准拥有/属于关系。

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

例如::as => 'public_product'

然后更新链接以显示需要的public_products_path

在您的产品#show action中,您应该这样做:

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

您还可以考虑在路线上设置约束...... 我在这里列出了一个Gist供我自己参考,可能对你有用。 https://gist.github.com/1908782

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

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