我在Rails 3.1中遇到以下错误:
#<#:0x71152b0>
的未定义局部变量或方法`sitemap_home_path'错误来自以下行:
看起来我错误地定义了我的路线。我routes.rb这条路线的定义如下:
root :to => 'home#index'
resources :home do
collection do
.....
get :sitemap
.....
end
end
所以,我希望我的网址为http://localhost:3000/home/sitemap,其中sitemap是views / home下的sitemap.html.erb文件。有人可以向我解释为什么在这种情况下不会创建sitemap_home_path吗?
使用以下Rails 2.1声明工作正常:
resources :home, :collection => {...., :sitemap => :get }
答案 0 :(得分:2)
要获得所需的url_path,即sitemap_home_path,您的routes.rb应如下所示:
resource :home
collection do
get :sitemap
end
end
原因是home是一个总是在没有ID的情况下查找的资源。因此,在这种情况下,您应该使用单一资源。一般来说,请参阅http://guides.rubyonrails.org/routing.html#singular-resources和导轨指南,因为有关路由的文章非常全面。
答案 1 :(得分:0)
运行rake routes
是查看Rails命名路由的好方法。使用您的代码,您可能会看到类似的内容:
sitemap_home_index GET /home/sitemap(.:format) {:action=>"sitemap", :controller=>"home"}
home_index GET /home(.:format) {:action=>"index", :controller=>"home"}
POST /home(.:format) {:action=>"create", :controller=>"home"}
new_home GET /home/new(.:format) {:action=>"new", :controller=>"home"}
edit_home GET /home/:id/edit(.:format) {:action=>"edit", :controller=>"home"}
home GET /home/:id(.:format) {:action=>"show", :controller=>"home"}
PUT /home/:id(.:format) {:action=>"update", :controller=>"home"}
DELETE /home/:id(.:format) {:action=>"destroy", :controller=>"home"}
因此,您想使用<%= link_to 'Sitemap', sitemap_home_index_path %>
。