我有一个创建产品页面和一个添加照片页面。添加照片页面应该将照片添加到刚刚创建的产品中。
我可以添加照片页面/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
完整控制台错误
在2013-07-09 02:11:11 -0400开始发布127.0.0.1的“/ photos” 由PhotosController处理#create为JSON 参数:{“utf8”=&gt;“✓”,“authenticity_token”=&gt;“K9jWB2D0bFUB5 + KOCRKLUsuDGNLchjzCBCL1h1znOiQ =”,“photo”=&gt; {“upload”=&gt;#&gt;}} 完成404未找到1ms
ActiveRecord :: RecordNotFound(找不到没有ID的产品): app / controllers / photos_controller.rb:15:在'create'
使用sachins解决方案的控制台
在2013-07-09 02:55:25 -0400开始发布“/ photos”127.0.0.1 由PhotosController处理#create为JSON 参数:{“utf8”=&gt;“✓”,“authenticity_token”=&gt;“5RV + GUCvNEFrw7l3 / ApqAlbK / XJP78LmDR2Hc + O0rQ0 =”,“product_id”=&gt;“125”,“photo”=&gt; {“上传“=&GT;#&GT;}} 产品负载(0.1ms)选择“产品”。* FROM“产品”WHERE“产品”。“id”=?限制1 [[“id”,“125”]] 重定向到http://google.com/ 完成302发现在4ms(ActiveRecord:0.1ms)
在2013-07-09 02:55:25 -0400开始获取127.0.0.1的“/” 由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)
答案 0 :(得分:2)
在表单中使用form_for [@product, @photo]
而不只是@photo
。当然,请务必使用params[:product_id]
找到该产品。
你需要像这样嵌套你的路线:
resources :products do
resources :photos
end
否则您的请求中不会有params[:product_id]
。
答案 1 :(得分:2)
尝试表格
form_for [@product, @photo]
答案 2 :(得分: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
答案 3 :(得分:1)
从params
访问product_id时出错使用params[:product_id]
代替params[:product][:product_id]
答案 4 :(得分:0)
Just set the hidden_field_tag in form_for
eg:-
= hidden_field_tag 'product_id', @product.id