rails собственный контроллер ресурсов и форма для ошибок

У меня есть таблица базы данных store

название модели models/store/store.rb

class Store::Store < ActiveRecord::Base
...
end

контроллер controllers/store/maintenance_controller.rb

class Store::MaintenanceController < ApplicationController

  def index
    @stores = Store.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @stores }
    end
  end

  def new
    @store = Store.new

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

routes.rb

  namespace :store do
    root :to => "store#index"
    resources :store, :path => 'maintenance', controller: 'maintenance', :as => 'maintenance'
  end

рейк-маршруты |хранилище grep

      store_root        /store(.:format)                                           store/store#index
  store_maintenance_index GET    /store/maintenance(.:format)                               store/maintenance#index
                        POST   /store/maintenance(.:format)                               store/maintenance#create
    new_store_maintenance GET    /store/maintenance/new(.:format)                           store/maintenance#new
   edit_store_maintenance GET    /store/maintenance/:id/edit(.:format)                      store/maintenance#edit
        store_maintenance GET    /store/maintenance/:id(.:format)                           store/maintenance#show
                        PUT    /store/maintenance/:id(.:format)                           store/maintenance#update
                        DELETE /store/maintenance/:id(.:format)                           store/maintenance#destroy

если я ввожу localhost:3000/store, он работает, но если я ввожу localhost:3000/store/new, я получаю ошибку undefined method 'stores_path' for в строке <%= form_for(@store) do |f| %>

что здесь не так? Спасибо (у меня уже есть контроллер хранилища, поэтому мне нужно переименовать контроллер для таблицы хранилища, если я хочу использовать строительные леса)


person Muflix    schedule 22.09.2013    source источник
comment
Какая у вас версия Rails?   -  person Victor    schedule 22.09.2013
comment
рельсы -v возвращает 3.2.13   -  person Muflix    schedule 22.09.2013


Ответы (2)


Ваша форма ищет от POST до stores_path, но именно store_maintenance_index_path ведет ваш маршрут для действия создания. Так что нет stores_path.

У тебя неправильная установка..

У вас нет ресурсов маршрутов для stores, только для maintenances..

Итак, реальный вопрос в том, что вы пытаетесь CRUD? Это maintenances или stores?

Если вы хотите CRUD stores, измените маршруты на:

namespace :store do
  resources :stores
end

Если вы действительно хотите отредактировать путь к обслуживанию, что-то вроде этого:

namespace :store do
  resources :stores, path: 'maintenances', controller: 'stores', as: 'stores'
end

Вы не хотите CRUD stores в контроллере maintenances, это просто неправильно...

person Tim Baas    schedule 22.09.2013
comment
я хочу таблицу хранения CRUD, но crud действия имеют в контроллере обслуживания, потому что я использую контроллер хранилища для чего-либо еще, это возможно ?? - person Muflix; 22.09.2013
comment
хорошо, я подумаю об этом, может быть, я переименую контроллер магазина - person Muflix; 22.09.2013
comment
Если вы действительно этого хотите, у вас могут быть StoreController и StoresController, одиночное и множественное число. Но я бы посоветовал один контроллер на модель. Кроме того, если вас беспокоят только пути, просто используйте scope вместо /store. И узнайте больше информации о маршрутизации в целом. - person Tim Baas; 22.09.2013

Можете ли вы попробовать переместить models/store/store.rb в models/store.rb, а затем изменить строку на:

class Store < ActiveRecord::Base
...
end
person Victor    schedule 22.09.2013