WalleZhang 2009-02-26 22:01
浏览 247
已采纳

rails2.2.2嵌套资源路径问题

一个分类可以有多篇文章,一个文章可以有多个评论

我定义的路由是这样的:
[code="ruby"]map.resources :categories,:shallow=>true do |category|
category.resources :articles do |article|
article.resources :comments
end
end[/code]

看那个:shallow=>true,可以使下面的article不用写在category后面,我新建文章的链接是new_article_path,但是浏览网页的时候,提示错误:
[code="ruby"]undefined local variable or method `new_article_path' for #ActionView::Base:0x49022a8[/code]

这样写可以:new_category_article_path(1)

但是在创建文章之前不知道分类的ID,请问这种情况应该怎么写创建新文章的连接~

谢咯~

[b]问题补充:[/b]
但是不加那个参数的话,会提示少一个参数,也会报错~

这里是错误代码:
[code="ruby"]new_category_article_url failed to generate from {:action=>"new", :controller=>"articles"} - you may have ambiguous routes, or you may need to supply additional parameters for this route. content_url has the following required parameters: ["categories", :category_id, "articles", "new"] - are they all satisfied?[/code]

这个是用rake routes显示出来新建文章的路由:
[code="ruby"]new_category_article GET /categories/:category_id/articles/new {:action=>"new", :controller=>"articles"}[/code]

为什么让提示输入一个category_id。。。。
[b]问题补充:[/b]
好像不管把:shallow=>true加到哪层,在调用new方法那个路由上面,总是需要输入一个父资源的ID,可是new的时候怎么能知道父资源的ID呢~比如创建一篇文章,在new.html.erb那个页面出来之后才会选择分类~
[b]问题补充:[/b]
也就是说我可以在index那个方法里面,加上这个方法:
[code="ruby"]@category = Category.new[/code]

然后在index那个页面上的连接改为:
[code="ruby"]new_category_article_path(@category)[/code]
可是这样生成的连接ID那里是空的……难道非要我在创建之前指定一个category_id么?

[b]问题补充:[/b]
现在问题好像就是:如何显示所有分类的文章……
[b]问题补充:[/b]
现在是在new的方法里面,搜索第一个category的ID,然后传入,创建文章的时候,有一个select,选择分类,保存的时候select里面选择的分类会覆盖一开始那个分类ID,但是这样的话,虽然可以实现功能,但是地址栏是categories/1/articles/new,而且创建完了之后返回article首页的时候,也需要传入一个category的ID,用来显示哪个分类的文章,如果我想显示所有分类的文章,我还得传入一个ID,只是在action里面find的时候,不加入category_id的这个搜索条件,也是可以达到目的,但是地址栏仍然不好看,显示categories/2/articles

这个应该怎么解决呃~难道要单独写一个路由么?

  • 写回答

5条回答 默认 最新

  • iteye_16618 2009-02-27 17:55
    关注

    再写一个路由,用户如果想浏览全部文章,就用/articles
    如果想通过分类,再浏览articles,就用现在的路由

    -但是地址栏是categories/1/articles/new-

    很正常,因为文章可以有多个分类,同一个文章可以是category1或者category3.当然你也可以用/articles的新路由来创建文章

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试