При указании пути путь не совпадает - PullRequest
0 голосов
/ 05 января 2012

маршруты:

  resources :news_items, :path => 'news', :as => 'news' do
   collection do
     get 'all' => 'news_items#news'
  end

контроллер:

def new
  @news = NewsItem.new
  @news.file_uploads.build

  respond_to do |format|
    format.html # new.html.erb
    format.json { render json: @news }
  end
end

форма:

<%= form_for(@news, :html => {:class=>'form-stacked', :multipart => true}) do |f| %>
  <% if @news.errors.any? %>

Когда я запускаю рейк-маршруты

          all_news_index GET    /news/all(.:format)                 {:action=>"news", :controller=>"news_items"}
          news_index GET    /news(.:format)                     {:action=>"index", :controller=>"news_items"}
                     POST   /news(.:format)                     {:action=>"create", :controller=>"news_items"}
            new_news GET    /news/new(.:format)                 {:action=>"new", :controller=>"news_items"}
           edit_news GET    /news/:id/edit(.:format)            {:action=>"edit", :controller=>"news_items"}
                news GET    /news/:id(.:format)                 {:action=>"show", :controller=>"news_items"}
                     PUT    /news/:id(.:format)                 {:action=>"update", :controller=>"news_items"}
                     DELETE /news/:id(.:format)                 {:action=>"destroy", :controller=>"news_items"}

Когда я перехожу к '/ news / new', я получаю:

No route matches {:path_prefix=>"news", :controller=>"news_items", :format=>nil}

, когда я перехожу к '/ news / 4 / edit', я получаю:

No route matches {:path_prefix=>"news", :action=>"show", :controller=>"news_items", :format=>nil, :id=>#<NewsItem id: 4,...

1 Ответ

0 голосов
/ 05 января 2012

Мне кажется, проблема в линии form_for(@news).

Это создаст форму, для которой URL выводится классом @ news.

Кажется, это класс NewsItem, поэтому он попытается установить ссылку на news_items_path.

Вы должны попытаться указать URL явно.

form_for(@news, :url => news_path(@news))
...