2014-05-24 90 views
1

我試圖使用link_to幫助函數爲特定產品創建新訂單。這裏是我的:爲嵌套資源創建新的link_to

產品型號

class Product < ActiveRecord::Base 
    has_many :orders 
end 

的routes.rb

resources :products, :only => [:show, :new, :create, :index, :update, :destroy] do 
    resources :orders, :only => [:create] 
    end 

視圖產品/ show.html.erb

<%= link_to 'New Order', new_product_orders_path(@product) %> 

控制器訂單

class OrdersController < ApplicationController 

    def create 
    @order = Order.new 
    end 

end 

相關耙路線:

product_orders POST /products/:product_id/orders(.:format)          orders#create 

但是,當我這樣做,我得到了一個未定義的方法`new_product_orders_path」

什麼在軌道4,5這樣做的正確方法?

+0

是你的完整控制器代碼嗎?張貼您的耙路線輸出。 – Pavan

+0

增加了耙路。那不是完整的控制器代碼,你還需要看到什麼? – asolberg

回答

4

在你的路由添加new這裏的行動

resources :orders, :only => [:create, :new] 

而且您的控制器丟失new行動,在你的create行動,你需要保存記錄

class OrdersController < ApplicationController 

    before_filter :set_product 

    def new 
    @order = @product.orders.new 
    end 

    def create 
    @order = @product.orders.new(params[:order]) 
    @order.save 
    end 

    private 

    def set_product 
     @product = Product.where("id =?", params[:product_id]).first 
    end 

end 
+0

我做到了,但我仍然得到未定義的方法'new_product_orders_path'是那個右側的幫助器方法? – asolberg

+0

更新您的耙路線爲'新'行動 – RSB

1

我想你需要

resources :products, :only => [:show, :new, :create, :index, :update, :destroy] do 
     resources :orders, :only => [:create, :new] 
    end 

你也可以檢查你的ro在服務器路徑末尾鍵入'/ rails/info/routes'即可。

+0

我做到了,但我仍然得到未定義的方法'new_product_orders_path'是那個正確的幫手方法? – asolberg

+0

對不起。你還必須在你的'OrdersController'中創建一個'new'動作,正如上面的答案所述。 – jplisamaria