私のモデル:
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