2016-08-28 31 views
0

ブログアプリを構築しようとしており、私はtrixテキストエディタとCarrierWaveを使用しています。今保存する前にRailsモデルを関連付ける方法

#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 

私の問題:

トリップエディタでは、テキストエリアに画像をドラッグすると、私は次のコードを使用して、独自のBlogImagesコントローラとモデルの画像を掲載することにより、作業画像のアップロードを得ることができたことができます私は保存されたBlogImageを持っているが、彼らに関連付ける必要のあるブログはまだ作成されていないので、この関連付けを設定することはできません。私はRailsにはかなり新しいので、どんな指針も素晴らしいだろう。

+1

あなたは、ネストされたフォームを見てみる必要があります。 html#nested-forms メインモデルを保存する前に関連モデルを作成しないでください。誰かが数十枚の画像をアップロードし、ブログフォームを提出しないことを選択するとどうなりますか?あなたはジャンクイメージモデルが残されます。 –

答えて

1

おそらく、BlogImagesと同時にネストされた属性を使用してBlogを保存したいと思うでしょう。それぞれのモデル(BlogとBlogImage)で、2つのモデル間の関連付けが正しく設定されていることを確認する必要があります。あなたのBlogモデルで

belongs_to :blog

は、ブログのモデルでaccepts_nested_attributes_for :blog_imagesを追加

受け入れるようにBlogControllerの強力なパラメータを変更します。あなたのBlogImageモデルで

has_many :blog_images

ネストされたatt

ブログ記録を保存すると、その中に入れ子になっているすべてのBlogImageも関連付けられて保存されます。

は、このプロセスへの部品の数がありますので、私はこのようなチュートリアルをチェックアウトしたい:http://guides.rubyonrails.org/form_helpers:http://tutorials.pluralsight.com/ruby-ruby-on-rails/ruby-on-rails-nested-attributes

関連する問題