두 가지 모델 user_item
과 user_item_images
.
schema.rb
create_table "user_item_images", force: :cascade do |t|
t.integer "user_item_id"
t.datetime "created_at"
t.datetime "updated_at"
t.string "picture"
end
create_table "user_items", force: :cascade do |t|
t.integer "user_id"
t.integer "item_id"
t.integer "status", default: 0
t.boolean "hide_banner", default: false
t.datetime "created_at"
t.datetime "updated_at"
t.string "picture"
t.string "declined_reason"
end
사용자가 새 user_item
. 양식의 유일한 필드는 사용자가 여러 사진을 업로드 할 수있는 사진 용입니다. 성공하면 업로드되는 각 사진에 user_item
대한 새 항목과 함께 하나의 새 항목 이 만들어 user_item_image
집니다.
형태
<%= simple_form_for :user_item, url: user_items_path, html: {multipart: true} do |user_item_builder| %>
<%= user_item_builder.input :item_id, as: :hidden, input_html: { value: "#{@item.id}" } %>
<%= user_item_builder.simple_fields_for :user_item_images do |user_item_images_builder| %>
<%= user_item_images_builder.input :picture, as: :file, label: false, name: "user_item_images[picture][]", input_html: { multiple: true } %>
<% end %>
<% end %>
user_item_controller.rb
def create
@user_item = current_user.user_items.new(user_item_params)
raise 'foo'
if @user_item.save
params[:user_item][:user_item_images]['picture'].each do |a|
@user_item_image = @user_item.user_item_images.create!(:picture => a)
end
# Sends email to user when item request is created.
itemMailer.user_item_submission_email(current_user, @user_item.item).deliver_later
flash[:notice] = "Thank you for your item request!"
else
@user_item.errors.full_messages.each do |message|
flash[:alert] = message
end
end
redirect_to item_path(@user_item.item)
end
private
def user_item_params
params.require(:user_item).permit(:item_id, user_item_images_attributes: [:user_item_id, :picture])
end
user_item.rb
belongs_to :user
has_many :user_item_images
mount_uploader :picture, PictureUploader
accepts_nested_attributes_for :user_item_images
user_item_image.rb
mount_uploader :picture, PictureUploader
belongs_to :user_item
양식을 제출할 때 Unpermitted parameter: user_item_images
콘솔에 표시되고 이유를 알 수 없습니다.
이것을 변경하십시오 :
<%= ..., name: "user_item_images[picture][]", ... %>
이에:
<%= ..., name: "user_item_images_attributes[picture][]", ... %>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다