0

我有一个创建产品页面和一个添加照片页面。添加照片页面应该将照片添加到刚刚创建的产品中。

我可以添加照片页面/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

图片.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 开始 POST "/photos" for 127.0.0.1 由 PhotosController#create as JSON 参数处理:{"utf8"=>"✓", "authenticity_token"=>"K9jWB2D0bFUB5+ KOCRKLUsuDGNLchjzCBCL1h1znOiQ=", "photo"=>{"upload"=>#>}} Completed 404 Not Found in 1ms

ActiveRecord::RecordNotFound(找不到没有 ID 的产品):app/controllers/photos_controller.rb:15:in `create'

带有 sachin 解决方案的控制台

在 2013 年 7 月 9 日 02:55:25 -0400 开始为 127.0.0.1 发布“/照片”,由 PhotosController#create 作为 JSON 参数处理:{“utf8”=>“✓”、“authenticity_token”=>“5RV+ GUCvNEFrw7l3/ApqAlbK/XJP78LmDR2Hc+O0rQ0=", "product_id"=>"125", "photo"=>{"upload"=>#>}} 产品加载 (0.1ms) SELECT "products".* FROM "products"在哪里“产品”。“id”=?LIMIT 1 [["id", "125"]] 重定向到http://google.com/ Completed 302 Found in 4ms (ActiveRecord: 0.1ms)

在 2013-07-09 02:55:25 -0400 开始 GET "/" for 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 Completed 200 OK in 93ms (Views: 91.8ms | ActiveRecord: 0.3ms)

4

5 回答 5

2

使用form_for [@product, @photo]而不是仅@photo在您的表单中。当然,请务必使用params[:product_id].

您需要像这样嵌套您的路线:

resources :products do
  resources :photos
end

否则,您将不会收到params[:product_id]您的请求。

于 2013-07-09T06:20:43.683 回答
2

试试你的表格

form_for [@product, @photo] 
于 2013-07-09T06:21:56.633 回答
2

试试这个:---

照片控制器

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

图片.html.haml

= form_for @photo, :html => { :multipart => true, :id => "fileupload"  } do |f|
  = f.file_field :upload
  = hidden_field_tag 'product_id', @photo.product_id
于 2013-07-09T06:34:16.057 回答
1

从 params 访问 product_id 时出现错误

params[:product_id]改为使用params[:product][:product_id]

于 2013-07-09T06:08:49.180 回答
0
Just set the hidden_field_tag in form_for
 eg:-

= hidden_field_tag 'product_id', @product.id
于 2013-07-09T06:53:05.453 回答