Помощники по именам URL-адресов маршрутизации Rails

Какие основные настройки необходимы, чтобы обеспечить работу помощников по именам URL-адресов маршрутизации?

Например, в моем маршруте есть следующее:

Blog::Application.routes.draw do
  resources :news, :as => :news_items, :controller => :news_items, :only => [:show, :index]

  scope :module => "refinery" do
    scope(:path => 'refinery', :as => 'admin', :module => 'Admin') do
      resources :news, :except => :show, :as => :news_items, :controller => :news_items
    end
  end
end

но следующее, похоже, не работает:

new_refinery_news_url

Я продолжаю получать ошибку

неопределенная локальная переменная или метод `new_refinery_news_url '

Так что я почти уверен, что чего-то не хватает в том, как я настроил свое приложение, основная маршрутизация которого находится в геме RefineryCMS, который был добавлен в Gemfile.

Есть предположения?


person mabounassif    schedule 30.11.2011    source источник


Ответы (4)


Пришлось вместо этого использовать main_app.new_refinery_news_url.

person mabounassif    schedule 05.02.2012

Имя помощника будет new_admin_news_item_url.

Найти все маршруты и их вспомогательные методы несложно. Просто запустите rake routes и вы увидите:

          news_items GET    /news(.:format)                   {:action=>"index", :controller=>"news_items"}
           news_item GET    /news/:id(.:format)               {:action=>"show", :controller=>"news_items"}
    admin_news_items GET    /refinery/news(.:format)          {:action=>"index", :controller=>"refinery/Admin/news_items"}
                     POST   /refinery/news(.:format)          {:action=>"create", :controller=>"refinery/Admin/news_items"}
 new_admin_news_item GET    /refinery/news/new(.:format)      {:action=>"new", :controller=>"refinery/Admin/news_items"}
edit_admin_news_item GET    /refinery/news/:id/edit(.:format) {:action=>"edit", :controller=>"refinery/Admin/news_items"}
     admin_news_item PUT    /refinery/news/:id(.:format)      {:action=>"update", :controller=>"refinery/Admin/news_items"}
                     DELETE /refinery/news/:id(.:format)      {:action=>"destroy", :controller=>"refinery/Admin/news_items"}
person miaout17    schedule 30.11.2011
comment
В том-то и дело, не работают все маршруты от rake routes. Единственный способ обойти эту проблему - напрямую использовать / refinery / news / new, например <%= link_to t('.create'), '/refinery/news/new' , :class => "add_icon" %> - person mabounassif; 30.11.2011

Для монтируемых движков всегда нужно указывать main_app. (или для маршрутов Refinery "refinery."), потому что двигатели изолированы от приложения.

person foomip    schedule 05.05.2012

Решение, если вы используете маршруты за пределами нефтеперерабатывающего завода, состоит в том, чтобы префикс named_path с объектом Rails, который содержит методы для именованных маршрутов.

Rails.application.routes.url_helpers.new_admin_news_item_path
person New Alexandria    schedule 21.03.2014