2013-07-09 38 views
0

我有一個創建產品頁面和一個添加照片頁面。添加照片頁面應該添加照片到剛創建的產品。創建動作時Rails nomethod錯誤

我可以添加照片頁面/products/:product_id/pics(.:format),但我得到一個錯誤提交

的ActiveRecord :: RecordNotFound(找不到產品沒有ID):

照片控制器

def create 
    @product = Product.find(params[:product_id]) # <--- error here 
    @photo = Photo.new 

    if @photo.valid? 
    @photo.product_id = @product.id 
    @photo.save! 
    respond_to do |format| 
     format.html { redirect_to product_path(@product) } 
     format.json { render json: @product } 
    end 
    else 
    redirect_to root_url, :notice => "Somehting went wrong!" 
    end 
end 

pics.html.haml

= form_for @photo, :html => { :multipart => true, :id => "fileupload" } do |f| 
    = f.file_field :upload 

產品控制器

def pics 
    @product = Product.find(params[:product_id]) 
    @photo = Photo.new 
    # @product.photos.build 
    end 

全控制檯錯誤

開始POST 「/照片」 爲127.0.0.1,在2013年7月9日2點十一分11秒 - 0400 通過PhotosController處理#創建爲JSON 參數:{「utf8」=>「✓」,「authenticity_token」=>「K9jWB2D0bFUB5 + KOCRKLUsuDGNLchjzCBCL1h1znOiQ =」,「photo」=> {「upl OAD「=>#>}} 完成404在1ms內

的ActiveRecord :: RecordNotFound(沒有ID找不到產品)沒有找到: 應用程序/控制器/ photos_controller.rb:15:在`創建」

與sachins解決方案控制檯

在2013年7月9日二點55分25秒-0400 處理由PhotosController#入門POST 「/照片」 爲127.0.0.1創建爲JSON 參數:{「UTF8 「=>」✓「,」authenticity_token「=>」5RV + GUCvNEFrw7l3/ApqAlbK/XJP78LmDR2Hc + O0rQ0 =「,」product_id「=>」125「,」photo「=> {」upload「=>#>} } Product Load(0.1ms)SELECT「products」。* FROM「products」WHERE「products」。「id」=? LIMIT 1 [[ 「ID」, 「125」]] 重定向到http://google.com/ 完成302在4ms的實測值(ActiveRecord的:爲0.1ms)

發起者在2013年7月9日02 GET 「/」,對於127.0.0.1: 55:25 -0400 StaticPagesController#home作爲JSON處理 在佈局/應用程序中呈現static_pages/home.html.haml(0.1ms) 用戶負載(0.3ms)SELECT「users」。* FROM「users」WHERE「users 」。 「的auth_token」 IS NULL LIMIT 1 在93ms完成200 OK(查看:91.8ms |的ActiveRecord:0.3ms的)

回答

2

嘗試了這一點:---

照片控制器

def new 
    @product = Product.find(params[:product_id]) 
    @photo = Photo.new 
    @photo.product_id = @product.id 
end 

pics.html.haml

= form_for @photo, :html => { :multipart => true, :id => "fileupload" } do |f| 
    = f.file_field :upload 
    = hidden_field_tag 'product_id', @photo.product_id 
+0

我剛纔試過看到更新 –

1

誤差是在有從PARAMS

訪問PRODUCT_ID 0

使用params[:product_id]代替params[:product][:product_id]

+0

ActiveRecord :: RecordNotFound(找不到沒有ID的產品): –

+0

提供帶有來自日誌文件的跟蹤的錯誤日誌。 –

+0

我在編輯 –

2

使用form_for [@product, @photo],而不是僅僅@photo在表單中。當然,一定要找到使用params[:product_id]的產品。

你需要你的巢的路線是這樣的:

resources :products do 
    resources :photos 
end 

否則,你會不會對你的要求params[:product_id]

+0

中添加了它,它使我爲#<#:0xb5a572a0> –

+0

未定義方法'product_photos_path'我更新了答案。 –

2

嘗試在形式

form_for [@product, @photo] 
0
Just set the hidden_field_tag in form_for 
eg:- 

= hidden_field_tag 'product_id', @product.id