我的一个rails应用程序遇到了一个非常奇怪的问题。我想我可能正在做一些非常愚蠢的事情,而我却无法识别。我的问题是,我似乎错过了大约一半的索引路径。
例如,如果我的控制器是模型foo的“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
还会返回方法丢失错误。
答案 0 :(得分:36)
这是因为您使用的是resources
(resource
)的单一化版本。没有为这些生成index
行动路线。您应该将其更改为复数版本,并从行中删除:controller
。