Я использую Ruby on Rails 3.0.9, и я хотел бы знать, почему я получаю ошибку, описанную ниже, и как я могу ее решить.
В моем /views/articles/categories/_content.html.erb
файле у меня есть:
...
<%= link_to("New article", {:controller => content[:article_controller], :action => 'new'}) %>
...
Если я установлю content[:article_controller]
(обе настройки true
и false
для опции :only_path
)
1. content[:article_controller] = 'articles'
2. content[:article_controller] = '/articles'
3. content[:article_controller] = '/articles/'
4. content[:article_controller] = '/'
4. content[:article_controller] = ''
Я получаю соответственно следующие ошибки (примечание :controller
значения):
1. `ActionView::Template::Error (No route matches {:controller=>"articles/categories/articles", :action=>"new"})`
2. `ActionView::Template::Error (No route matches {:controller=>"articles//articles", :action=>"new"})`
3. `ActionView::Template::Error (No route matches {:controller=>"articles/", :action=>"new"})`
4. `ActionView::Template::Error (No route matches {:controller=>"articles//", :action=>"new"})`
4. `ActionView::Template::Error (No route matches {:controller=>"articles/categories/", :action=>"new"})`
Это ошибка Ruby on Rails или это моя ошибка? В чем проблема и как я могу решить, как заставить link_to
нормально работать?
Однако я могу решить эту проблему с помощью:
<%= link_to("New article", {:controller => '../', :action => 'new'}) %>
Но почему он работает с '.../'
, а не другими способами?
Я заметил, что некоторое время путь к контроллеру, для которого я пытаюсь установить content[:article_contr8oller]
, кажется, полагается на "базовый" текущий путь к контроллеру, который обрабатывает файл представления (файл контроллера - app/controllers/articles/categories/concerns_controller.rb
- читайте ниже для больше информации) ... почему это происходит?
Это также происходит с использованием url_for
:
url_for(:controller => 'articles', :action => 'new')
Запустив команду rake routes
, я получаю следующее:
articles_categories GET /articles/categories(.:format) {:action=>"index", :controller=>"articles/categories"}
POST /articles/categories(.:format) {:action=>"create", :controller=>"articles/categories"}
new_articles_category GET /articles/categories/new(.:format) {:action=>"new", :controller=>"articles/categories"}
edit_articles_category GET /articles/categories/:id/edit(.:format) {:action=>"edit", :controller=>"articles/categories"}
articles_category GET /articles/categories/:id(.:format) {:action=>"show", :controller=>"articles/categories"}
PUT /articles/categories/:id(.:format) {:action=>"update", :controller=>"articles/categories"}
DELETE /articles/categories/:id(.:format) {:action=>"destroy", :controller=>"articles/categories"}
articles GET /articles(.:format) {:action=>"index", :controller=>"articles"}
POST /articles(.:format) {:action=>"create", :controller=>"articles"}
new_article GET /articles/new(.:format) {:action=>"new", :controller=>"articles"}
edit_article GET /articles/:id/edit(.:format) {:action=>"edit", :controller=>"articles"}
article GET /articles/:id(.:format) {:action=>"show", :controller=>"articles"}
PUT /articles/:id(.:format) {:action=>"update", :controller=>"articles"}
DELETE /articles/:id(.:format) {:action=>"destroy", :controller=>"articles"}
P.S .: Если вам нужна дополнительная информация, дайте мне знать, и я также обновлю вопрос.
ОБНОВЛЕНИЕ I
В моем файле маршрута у меня есть:
namespace :articles do articles :categories end
scope :path => 'articles/categories/:id', :controller => 'articles/categories/concerns' do
...
end
resources :articles
ОБНОВЛЕНИЕ II
На мой взгляд /views/articles/categories/_content.html.erb
файлов, которые у меня есть:
<div class="links">
<%= link_to("New article", {:controller => content[:article_controller], :action => 'new'}) %>
</div>
В моих статьях :: Категории :: ConcernsController (то есть в файле app/controllers/articles/categories/concerns_controller.rb
) у меня есть:
def show
@articles_category = Articles::Category.find(params[:id])
respond_to do |format|
format.html {
render :partial => '/views/articles/categories/_content.html.erb',
:locals => {
:content => {
:article_controller => '/articles'
}
}
format.js {
...
end
end
end