Rails 3 - 缺少索引路径?

时间:2011-03-03 06:30:52

标签: ruby-on-rails routes rake

我的一个rails应用程序遇到了一个非常奇怪的问题。我想我可能正在做一些非常愚蠢的事情,而我却无法识别。我的问题是,我似乎错过了大约一半的索引路径。

例如,如果我的控制器是模型f​​oo的“foos”,我将拥有:

foos POST   /foos(.:format)      {:action=>"create", :controller=>"foos"}

但没有GET选项通常如下:

foos GET    /foos(.:format)   {:action=>"index", :controller=>"foos"}

下面我将向您展示我的实际代码,以帮助我恢复丢失的索引路径。

routes.rb中:

resource :announcements, :controller => "announcements" do
  resources :comments
  member do
    post 'vote'
  end
end

公告部分的路线:

announcements      POST   /announcements(.:format)      {:action=>"create", :controller=>"announcements"}
new_announcements  GET    /announcements/new(.:format)  {:action=>"new", :controller=>"announcements"}
edit_announcements GET    /announcements/edit(.:format) {:action=>"edit", :controller=>"announcements"}
                   GET    /announcements(.:format)      {:action=>"show", :controller=>"announcements"}
                   PUT    /announcements(.:format)      {:action=>"update", :controller=>"announcements"}
                   DELETE /announcements(.:format)      {:action=>"destroy", :controller=>"announcements"}

正如您所看到的,没有get / index。在我的控制器中,我定义了简单的索引方法......

def index
  @announcements = Announcement.all

  respond_to do |format|
    format.html
    format.xml  { render :xml => @announcements }  
  end
end

我真的不明白为什么我没有这个索引路径。它也发生在其他几个控制器上。任何帮助将不胜感激。

编辑:在控制台中,除了缺少索引路径的其他错误之外,app.announcements_path还会返回方法丢失错误。

1 个答案:

答案 0 :(得分:36)

这是因为您使用的是resourcesresource)的单一化版本。没有为这些生成index行动路线。您应该将其更改为复数版本,并从行中删除:controller