1

ユーザーが複数の画像を製品に追加できる製品ページを作成しています。当然のことながら、私は多くの画像アップロード フィールドを持っていますが、製品が作成されると、1 つの写真だけがデータベースに追加されます。他の人ではありません。単純な間違いを犯していますが、それが何であるかわかりません。

助けてくれてありがとう !

新商品形態(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
    = fields_for :photo, :html => {:multipart => true} do |fp|
      =fp.file_field :image  

  %p.button
    = f.submit

製品コントローラ

  def new 
    @product = Product.new
    @photo = Photo.new
  end


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

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

4 に答える 4

1

ネストされた属性フォームを実装しようとしています。そのため、 fields_for 部分を次のように変更します

%p
  = f.fields_for :photos do |fp|
    =fp.file_field :image

次に、コントローラーで新しいメソッドを変更します

def new 
  @product = Product.new
  3.times{ @product.photos.build }
end


def create
  @product = current_user.products.new(params[:product])
  if @product.valid?
    @product.save
    render "show", :notice => "Sale created!"
  else
    render "new", :notice => "Something went wrong!"
  end
end

モデルは次のように関連付ける必要があります

class Product
  has_many :photos
  accepts_nested_attributes_for :photos, allow_destroy: true
end

class Photo
  attr_accessible :image
  belongs_to :product
end

写真に「さらに追加」ボタンを実装したい場合は、Gem nested_formを使用できます。とても素敵なものです。

于 2013-06-05T05:46:31.837 に答える
1

これは、ネストされた属性によって実現できます。この Rails docをお読みください。

以下も参照してください。

于 2013-06-05T05:50:57.303 に答える
1

サーバーにはGemcarrierwaveを使用でき、フロントにはplupload http://www.plupload.com/を使用できます。これは非常に簡単です

于 2013-06-05T07:18:43.917 に答える