Вопрос

Я думаю, что я думаю о маршрутизации всех не так. У меня очень простые, две модели модели: продукт и фото. Продукт has_many: Фотографии и фото принадлежат_то: продукт.

Продукт имеет полный леса, а фото имеет фотографии_Controller, над которым я работаю.

В маршрутах. resources :products (сгенерировано летаком)

Поскольку фотографии - это вложенный ресурс продукта, я изменил это на:

resources :products do
    resources :photos
  end

и наконец:

root :to => "products#index"

Happy Reark Roures выплевывает:

  products GET             {:controller=>"products", :action=>"index"}
  products POST            {:controller=>"products", :action=>"create"}
  new_product GET          {:controller=>"products", :action=>"new"}
  edit_product GET         {:controller=>"products", :action=>"edit"}
  product GET              {:controller=>"products", :action=>"show"}
  product PUT              {:controller=>"products", :action=>"update"}
  product DELETE           {:controller=>"products", :action=>"destroy"}
  product_photos GET       {:controller=>"photos", :action=>"index"}
  product_photos POST      {:controller=>"photos", :action=>"create"}
  new_product_photo GET    {:controller=>"photos", :action=>"new"}
  edit_product_photo GET   {:controller=>"photos", :action=>"edit"}
  product_photo GET        {:controller=>"photos", :action=>"show"}
  product_photo PUT        {:controller=>"photos", :action=>"update"}
  product_photo DELETE     {:controller=>"photos", :action=>"destroy"}
  products GET             {:controller=>"products", :action=>"index"}
  products POST            {:controller=>"products", :action=>"create"}
  new_product GET          {:controller=>"products", :action=>"new"}
  edit_product GET         {:controller=>"products", :action=>"edit"}
  product GET              {:controller=>"products", :action=>"show"}
  product PUT              {:controller=>"products", :action=>"update"}
  product DELETE           {:controller=>"products", :action=>"destroy"}
  root                     {:controller=>"products", :action=>"index"}

Это означает, что форма в продуктах / новых будет опубликовать в продуктах # создавать, что я хочу затем перенаправить на фотографии # новые и иметь форму для загрузки продукта_Фото, сгенерированные соответствующими фотографиями / new.html.erb, которые будут публиковать на фотографии # Создать, верно?

В Product_Controller.rb:

def create
    @product = Product.new(params[:product])

    respond_to do |format|
      if @product.save
        redirect_to new_product_photo_path, :notice => 'Product was successfully created.'
      else
        render :action => "new"
      end
    end
  end

А в фото_controller.rb (на данный момент):

def new
    @photo = Photo.new
  end

Так почему о, почему я получаю:

Routing Error

No route matches {:controller=>"photos", :action=>"new"}

Когда у меня ясно, что я делаю, у меня есть фотографии_Controller, новое действие в фотографиях_Controller, а new_product_photo_path явно просит пойти правильно? (У меня также есть фотографии / new.html.erb, которая имеет простой <h1>Photos</h1> для чего-то, чтобы сделать).

Я могу только сделать вывод, что я думаю об этом все неправильно, или что я сделал ошибку в Конвенции над конфигурацией, которую я не вижу.

Кто-нибудь?

Спасибо и добрые пожелания, Адам

Это было полезно?

Решение

Обновленный ответ:

Использование вложенного ресурса означает (в этом случае), что вы можете создать только новое фото в контексте продукта. Это означает, что приложение должно знать, какой продукт будет создан фотография.

В случае вашего перенаправления это означает, что вы должны добавить объект продукта в качестве параметра для new_product_photo_path:

redirect_to new_product_photo_path(@product)

Оригинальный ответ:

Это потому, что вы сделали его вложенным ресурсом. /products/1/photos/new вероятно, работает. Если вы хотите иметь возможность создавать новые фотографии через /photos/new ТОО тоже нужно добавить «ненужный» ресурс тоже.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top