order_products_url
ожидает передачи параметра - либо идентификатора заказа, либо самого объекта заказа. Без этого это не будет работать должным образом. Итак, используя ваш код выше:
def destroy
@product = Product.find(params[:id])
@order = Order.find(params[:order_id])
@product.destroy
respond_to do |format|
format.html { redirect_to(order_products_url(@order) }
format.xml { head :ok }
end
end
В качестве примечания вы можете немного сократить свои маршруты:
resources :orders do
resources :products
end
Указание контроллера является избыточным, когда он назван так, как ожидает Rails. Надеюсь, это поможет!
ОБНОВЛЕНИЕ: Я добавил ссылку на мою статью о маршрутизации в Rails 3 с загружаемыми примерами кода. Я обновил его с помощью параграфа, который объясняет именованные маршруты в разделе «Вещи, которые вы должны знать»:
Маршрутизация в Ruby on Rails 3