2

我对 Rails 还很陌生,但我之前已经完成了几个项目,包括 Michael Hartl 教程。我正在构建一个简单的应用程序来存储虚拟衣橱。我有 2 个表 - 用户和项目 - 其中一个用户有_许多项目和一个项目属于用户。我在 routes.rb 文件中设置了以下命名路由:

match "/wardrobe", to: "items#index"

但是,当我尝试在浏览器中转到 /wardrobe 时,出现以下无路由匹配错误:

No route matches {:action=>"show", :controller=>"items"}

当我通过 index 操作命名路由时,我不确定为什么 rails 会尝试通过 show 操作进行路由。这些是我的 ItemsController 中的相关操作:

def show
  @item = Item.find(params[:id])
end

def index
  @items = Item.all
end

在创建时调用重定向,如下所示:

def create
  @item = Item.new(params[:item])
  if @item.save
    flash[:success] = "Item added"
    redirect_to wardrobe_path                                                                                    
  else
    render 'new'
  end
end

rake routes 提供以下内容:

wardrobe        /wardrobe(.:format)       items#index

所以,我知道这条路线存在。谁能解释这里发生了什么?以及我该如何修复它?

提前致谢

4

1 回答 1

0

这可能是因为它的 rake 路由被称为wardrobe_path而不是wardrobes_path(复数) - 当它是单数时,Rails 将默认显示我相信的动作。这可能会造成混乱。

于 2012-08-16T15:28:09.790 回答