Путь маршрутизации в Rails 3.1 - PullRequest
0 голосов
/ 22 октября 2011

Я получаю следующую ошибку в Rails 3.1:

неопределенная локальная переменная или метод `sitemap_home_path 'для # <#: 0x71152b0>

Ошибка исходит из строки:

Похоже, я неправильно определил свой маршрут.Для моего маршрута .rb этот маршрут определен следующим образом:

root :to => 'home#index'

resources :home do
  collection do
    .....
    get :sitemap
    .....
  end
end

Итак, я ожидаю, что мой URL будет http://localhost:3000/home/sitemap, где sitemap - это файл sitemap.html.erb в views / home.Может кто-нибудь объяснить мне, почему в этом случае sitemap_home_path не создается?

Он работал нормально со следующим объявлением Rails 2.1:

 resources :home, :collection => {...., :sitemap => :get }

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

Чтобы получить желаемый url_path, т.е. sitemap_home_path, ваш route.rb должен выглядеть следующим образом:

resource :home
  collection do
    get :sitemap
  end
end

Причина в том, что home - это ресурс, который всегда ищется без ID.Поэтому в этом случае вы должны использовать единственный ресурс.Пожалуйста, обратитесь к http://guides.rubyonrails.org/routing.html#singular-resources и направляющим рельсов в целом, так как статья о маршрутизации является довольно полной.

0 голосов
/ 22 октября 2011

Запуск 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 %>.

...