使用: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;我想这也是有道理的。
那么在检查产品名称之前,我应该写什么来告诉路由检查编辑方法?
答案 0 :(得分:0)
我之前遇到过这个问题...... 您可以采取一些措施来实现您想要的网址路由......
首先,根据您的代码,我建议您查看命令行中rake routes
为与page_path或page_product / product_page路径相关的内容生成的内容,并查看它捕获的URL及其命名路由
如果它不是你想要的......那么你可以试试:
get '/:id' => 'products#show'
代替您的# WHAT_DO_I_TYPE_HERE
虽然,您可能需要对其进行约束(请参阅底部的链接),这样您仍然可以拥有/mypage/edit
和mypage/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