私はすべて間違ったルーティングを考えていると思います。製品と写真の2つのモデル設定があります。製品has_many:photos、および写真belongs_to:product。
製品には完全な足場があり、写真には私が取り組んでいるphotos_controllerがあります。
ルート.rbには次
のものがあります:(resources :products
スキャフォールドによって生成されます)
写真は製品のネストされたリソースであるため、これを次のように変更しました。
resources :products do
resources :photos
end
そして最後に:
root :to => "products#index"
幸いにもレーキルートが吐き出されます:
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のフォームはproducts#createにPOSTし、次にphotos#newにリダイレクトし、対応するphotos /new.html.erbによって生成されたproduct_photosをアップロードするためのフォームがあります。これはphotos#に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"}
rakeルートが明確に私がそう言っているとき、私はphotos_controller、photos_controllerに新しいアクションがあり、new_product_photo_pathは明らかに正しい方向に進むように求めていますか?<h1>Photos</h1>
(私はまた、何かをレンダリングするための簡単なphotos / new.html.erbを持っています)。
私はこれについてすべて間違った方法で考えている、または設定より規約で私が見ることができない誤りを犯したと結論付けることしかできません。
誰か?
よろしくお願いします、アダム