1

私のモデル:

class Product < ActiveRecord::Base
  has_many :product_images, dependent: :destroy
  accepts_nested_attributes_for :product_images, :reject_if => lambda { |p| p['image'].blank? }, :allow_destroy => true
end


class ProductImage < ActiveRecord::Base
  belongs_to :product
  mount_uploader :image, ProductImageUploader
  validates_presence_of :image
end

私のコントローラー:

  def create
    @product = Product.new(permitted_params.product)
    if @product.save
        redirect_to edit_admin_product_path(@product), notice: "success"
    else
      render :new
    end
  end

  def update
    @product = Product.find(params[:id])
    if @product.update_attributes(permitted_params.product)
      redirect_to edit_admin_product_path(@product), notice: "success"
    else
      render :edit
    end
  end

許可された_パラメータ:

class PermittedParams < Struct.new(:params)
  def product
    params.require(:product).permit(*product_attrs)
  end

  def product_attrs
    [:name, :content, :stock, :list_price, :selling_price, :bonus, :is_added,
     product_images_attributes: [:id, :image, :_destroy] ]
  end
end

そしてパラメータが渡されました:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"eqweq1231sda+3T0131643guXybT75X6NqN1ng=", "product"=>{"name"=>"weqwe", "content"=>"qweq", "product_images_attributes"=>{"0"=>{"image"=>"1069218_513152615405563_1187314087_n.jpg", "_destroy"=>""}}, "stock"=>"", "list_price"=>"", "selling_price"=>"123", "bonus"=>""}, "commit"=>"submit"}

明らかに、画像はパラメータに渡されます。ただし、製品を作成すると、イメージが空であることを警告するためにロールバックされます (私の ProductImage モデルの存在イメージを検証します)。

検証を削除すると、製品が作成されます。更新アクションで画像を正常にアップロードできます。何が問題なのか全くわかりません!助けてください。Q_Q

4

0 に答える 0