【问题标题】:How should these rails paths look like?这些铁轨路径应该是什么样子?
【发布时间】:2010-08-19 02:22:14
【问题描述】:

我的路线应该是这样的:

    >rake routes

                      GET    /categories/:category_id/articles(.:format)          {:controller=>"articles", :action=>"index"}
    category_articles POST   /categories/:category_id/articles(.:format)          {:controller=>"articles", :action=>"create"}
 new_category_article GET    /categories/:category_id/articles/new(.:format)      {:controller=>"articles", :action=>"new"}
                      GET    /categories/:category_id/articles/:id(.:format)      {:controller=>"articles", :action=>"show"}
                      PUT    /categories/:category_id/articles/:id(.:format)      {:controller=>"articles", :action=>"update"}
     category_article DELETE /categories/:category_id/articles/:id(.:format)      {:controller=>"articles", :action=>"destroy"}
edit_category_article GET    /categories/:category_id/articles/:id/edit(.:format) {:controller=>"articles", :action=>"edit"}
                      GET    /categories(.:format)                                {:controller=>"categories", :action=>"index"}
           categories POST   /categories(.:format)                                {:controller=>"categories", :action=>"create"}
         new_category GET    /categories/new(.:format)                            {:controller=>"categories", :action=>"new"}
                      GET    /categories/:id(.:format)                            {:controller=>"categories", :action=>"show"}
                      PUT    /categories/:id(.:format)                            {:controller=>"categories", :action=>"update"}
             category DELETE /categories/:id(.:format)                            {:controller=>"categories", :action=>"destroy"}
        edit_category GET    /categories/:id/edit(.:format)                       {:controller=>"categories", :action=>"edit"}

但每当我尝试在文章中使用除 新类别文章路径,

<%= link_to 'Show', categories_article %>

我得到了这个卑鄙的例外:

undefined local variable or method 'categories_article' for #<#<Class:0x00000102ce5768>:0x00000102ce3a80>

我在这里做错了什么?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    这里发生了一些事情:

    1. 没有定义名为“categories_article”的路由。您可能正在寻找“category_articles”或“category_article”。
    2. 对于“显示”操作,您需要指定要显示的对象的 ID。这种情况下,还需要指定父id(category_id)
    3. 通过名称引用这些路由时,需要在末尾添加“_path”或“_url”。

    这三者合起来就是这样的:

    <%= link_to 'Show', category_articles_path(:category_id => category.id) %>
    

    <%= link_to 'Show', category_article_path(:category_id => category.id, :id => article.id) %>
    

    或者,更短:

    <%= link_to 'Show', [category, article] %>
    

    【讨论】:

    • 还有一件事 - 是否有一种语法可以为其他操作(例如编辑)执行最短版本?
    • 给我的结果与 "edit"%>,我从文档中查到的
    • 对于编辑,我建议使用“edit_category_article_path(category_id, article_id)”的处理方式
    猜你喜欢
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多