0

ユーザーが写真をアップロードできるようにする製品ページを作成しようとしています。したがって、製品には_多くの写真があります。私はこの設定をしましたが、写真が追加されると列にproduct_idが必要ですが、データベースに保存するとproduct_id列が空白になります。

製品コントローラ

  def create

  @product = current_user.products.build(params[:product])
  @photo = current_user.photos.new(params[:photo])

    if @product.valid? && @photo.valid?
      @product.save
      @photo.save
      @photo.product_id = @product.id
      render "show", :notice => "Sale created!"
    else
      render "new", :notice => "Somehting went wrong!"
    end
end

新商品ページ(HAML)

%h1 
  create item
= form_for @product,:url => products_path, :html => { :multipart => true } do |f|         
  %p
    = f.label :name
    = f.text_field :name
  %p
    = f.label :description
    = f.text_field :description
  %p
    = fields_for :photo, :html => {:multipart => true} do |fp|
      =fp.file_field :image  

  %p.button
    = f.submit

schema.rb

  create_table "products", :force => true do |t|
    t.string   "name"
    t.text     "description"
    t.datetime "created_at",  :null => false
    t.datetime "updated_at",  :null => false
    t.integer  "user_id"
  end

  create_table "photos", :force => true do |t|
    t.integer  "product_id"
    t.datetime "created_at",         :null => false
    t.datetime "updated_at",         :null => false
    t.string   "image_file_name"
    t.string   "image_content_type"
    t.integer  "image_file_size"
  end
4

1 に答える 1

1

@photoこれは、最初に保存し、保存後設定した結果にすぎproduct_idません。もちろん、データベースで更新されることはありません。操作を逆にするだけです。

if @product.valid? && @photo.valid?
  # Recommended to test for success saving the product
  if @product.save
    # Set the product_id before saving
    @photo.product_id = @product.id
    # Then save the photo
    @photo.save
    render "show", :notice => "Sale created!"
  end
else
  render "new", :notice => "Somehting went wrong!"
end
于 2013-06-04T17:55:18.303 に答える