파일을 처리하기 위해 Active cocoon 양식을 사용하여 일부 이미지를 모델에 저장하려고합니다.Rails 5.2 누에 고치 모양의 활성 저장소
저는 많은 사과가있는 농부 클래스를 가지고 있습니다. 농부는 농부 양식을 통해 다양한 종류의 사과 각각에 대해 여러 이미지를 추가 할 수 있습니다. 농부 컨트롤러 내부
class Farmer < ActiveRecord::Base
has_many :apples, inverse_of: :farmer
accepts_nested_attributes_for :apples, allow_destroy: true,
reject_if: :all_blank
end
class Apple < ActiveRecord::Base
has_many_attached :apple_images
end
내가 가진 :
class Farmer < ApplicationController
def update
@farmer = Farmer.find(params[:farmer_id])
if @farmer.valid?
@farmer.update!(farmer_params)
redirect_to edit_farmer_path(farmer_id: @farmer.id)
else
...
...
end
end
private
def farmer_params
params.require(:farmer).permit(
:farmer_name,
apples_attributes: [
:id,
:color,
:size,
:_destroy
])
end
end
내보기 난 그냥 내 누에 고치 필드에이 추가
<div class="form-field">
<%= f.label :apple_images, "Please upload apple images" %>
<%= f.file_field :apple_images, multiple: true, data: { validates: {required: {}} } %>
</div>
이제 사과를 저장합니다 누에 고치 번
accepts_nested_attributes_for
호출을 사용하여 속성
파머 개체가 저장됩니다. 양식에 apple_images
을 추가 할 때까지이 모든 작업이 정상적으로 작동합니다.
Active Storage 읽어보기에서 읽어보기 항목을 저장 한 직후 파일을 첨부해야합니다.
당신이 읽을 수있는 당신이 컨트롤러에 하나의 이미지를 원하는 경우 readme here
하지만 짧은이 수행
def create
message = Message.create! params.require(:message).permit(:title, :content)
message.images.attach(params[:message][:images])
redirect_to message
end
이를 :
#inside an update method
Current.user.avatar.attach(params.require(:avatar))
또는 여러 이미지를 원하는 경우 이미지가 컨트롤러에 저장되는 모델에 직접있을 때 상당히 간단합니다. 처음에는
, 나는 그렇게 같이 PARAMS에 apple_images를 추가하는 것만 큼 쉽게 할 수있다 생각 :
def farmer_params
params.require(:farmer).permit(
:farmer_name,
apples_attributes: [
:id,
:color,
:size,
:apple_images,
:_destroy
])
end
을하지만,이 오류가 반환됩니다
ActiveModel::UnknownAttributeError - unknown attribute 'apple_images' for Apple.:
내가 사용에 대해 생각하고를 apple 객체가 업데이트/생성 된 후에 이미지를 첨부하기위한 사과 모델의 after_save 콜백. 나는 이것을 달성하는 방법을 모르지만.
<ActionController::Parameters {"utf8"=>"✓", "_method"=>"patch",
"farmer"=>{"farmer_name"=>"billy the farmer", "apples_attributes"=>
{"0"=>{"color"=>"Green",
"size"=>"A",
"apple_images"=>[#<ActionDispatch::Http::UploadedFile:0x007f9e8aa93168 @tempfile=#<Tempfile:/var/folders/n7/65r5561n44q0w4bdnmw42l880000gn/T/RackMultipart20171211-87415-1m2w7gh.png>, @original_filename="Screen Shot 2017-12-07 at 09.13.28.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"farmer[apples_attributes][0][apple_images][]\"; filename=\"Screen Shot 2017-12-07 at 09.13.28.png\"\r\nContent-Type: image/png\r\n">,
#<ActionDispatch::Http::UploadedFile:0x007f9e8aa93118 @tempfile=#<Tempfile:/var/folders/n7/65r5561n44q0w4bdnmw42l880000gn/T/RackMultipart20171211-87415-1gdbax2.jpeg>, @original_filename="WhatsApp Image 2017-12-06 at 1.23.35 PM.jpeg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"farmer[apples_attributes][0][apple_images][]\"; filename=\"WhatsApp Image 2017-12-06 at 1.23.35 PM.jpeg\"\r\nContent-Type: image/jpeg\r\n">],
"_destroy"=>"false", "id"=>"4"}}},
"commit"=>"Next",
"controller"=>"farmer/produce",
"action"=>"update",
"farmer_id"=>"3"} permitted: false>
당신의 로그를보고 params/field-names이 실제로 무엇을 통해 왔는지 확인하십시오 ... 질문을 편집하여 거기에 추가하십시오. –
안녕하세요 @TarynEast 나는 params을 추가했습니다. 농부 인'accepts_nested_attributes_for'를 통해 저장 될 사과 매개 변수의 나머지 부분과 함께'apple images'가 움직일 것입니다. ActiveStorage는 내가 믿을만한 사후에 개체에 첨부 된 이미지를 원하고 ActiveStorage는 다형성 테이블을 설정합니다. 사과 속성 외부의 Apple 클래스에 사과 이미지를 전달하여 after_save 콜백을 설정하여 이미지를 첨부 할 수 있는지 궁금합니다. – TheLegend