Ich versuche eine Blogging-App zu erstellen und verwende Trix-Texteditor und CarrierWave.So verknüpfen Sie Rails-Modelle, bevor eines gespeichert wurde
Trip-Editor können Sie Bilder in den Textbereich ziehen, und ich habe es geschafft, arbeiten Bild-Uploads zu erhalten, indem Bilder auf ihre eigenen BlogImages Controller und das Modell mit dem folgenden Code veröffentlichen:
#blog_images_controller.rb:
def create
@image = BlogImage.create(image_params)
@image.image = params[:image]
respond_to do |format|
if @image.save
format.json { render :json => { url: @image.image.url } }
end
end
end
private
def image_params
params.require(:image).permit(:image)
end
#blog_images.coffee:
(->
host = undefined
uploadAttachment = undefined
document.addEventListener 'trix-attachment-add', (event) ->
attachment = undefined
attachment = event.attachment
if attachment.file
return uploadAttachment(attachment)
return
host = '/blog_images'
uploadAttachment = (attachment) ->
file = undefined
form = undefined
xhr = undefined
file = attachment.file
form = new FormData
form.append 'Content-Type', file.type
form.append 'image[image]', file
xhr = new XMLHttpRequest
xhr.open 'POST', host, true
xhr.upload.onprogress = (event) ->
progress = undefined
progress = event.loaded/event.total * 100
attachment.setUploadProgress progress
xhr.onload = ->
href = undefined
url = undefined
url = href = JSON.parse(@responseText).url
attachment.setAttributes
url: url
href: href
xhr.send form
return
).call this
Mein Problem ist jetzt ist, dass ich ein gespeichertes BlogImage habe, aber das Blog, dem sie zugeordnet werden müssen, ist noch nicht erstellt worden, also kann ich diese Verbindung nicht einstellen. Ich bin ziemlich neu in Rails, also wäre jede Anleitung großartig.
Sie sollten einen Blick auf verschachtelte Formen annehmen: http://guides.rubyonrails.org/form_helpers. html # nested-forms Sie sollten keine verknüpften Modelle erstellen, bevor das Hauptmodell gespeichert wird. Was passiert, wenn jemand ein Dutzend Bilder hochlädt und das Blog-Formular nicht einreicht? Sie werden mit Junk-Image-Modellen verlassen. –