Я думаю, что я думаю о маршрутизации все неправильно.У меня очень простая модель с двумя моделями: Продукт и Фото.Product has_many: photos, и Photo own_to: product.
У продукта есть полный каркас, в то время как у Photo есть фотоконтроллер, над которым я работаю.
В route.rb у нас есть: resources :products
(генерируется эшафотом)
Поскольку фотографии являются вложенным ресурсом продукта, я изменил его на:
resources :products do
resources :photos
end
и, наконец,
root :to => "products#index"
Счастливо разбрасывает маршрутыout:
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"}
, что означает, что форма в products / new будет отправлять POST для продуктов # создавать, что я хочу затем перенаправить на фотографии # new и иметь форму для загрузки product_photos, созданных соответствующими фотографиями /new.html.erb, который будет POST для фотографий # создавать, верно?
в 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
и в photos_controller.rb (на данный момент):
def new
@photo = Photo.new
end
Итак, почему, почему я получаю:
Routing Error
No route matches {:controller=>"photos", :action=>"new"}
когда маршруты рейка ясно говорят, что я делаю, у меня есть photos_controller, новое действие в photos_controller, и new_product_photo_path явно просит перейтиправильный путь?(У меня также есть файл photos / new.html.erb с простым <h1>Photos</h1>
для чего-либо для рендеринга).
Я могу только заключить, что я думаю об этом совершенно неправильно или что у меня естьсделал ошибку в Соглашении по Конфигурации, которую я не вижу.
Кто-нибудь?
Спасибо и С наилучшими пожеланиями, Адам