1

jquery-file-upload-rails gem を使用して、複数の画像をプレビュー付きでフォームにアップロードしています。ファイルのアップロードは機能していますが、新しい写真を含む部分はブラウザの更新後にのみレンダリングされます! たぶん、誰かが見ることができます、何が悪いのか。

プロジェクトの編集ページに写真画像をロードするためにファイル アップローダーを呼び出しています。

= f.fields_for :photos, Photo.new do |ff|
  = ff.file_field :img_file, multiple: true, name: "project[photos_attributes][][img_file]", id: 'new_photo'

フォトコントローラー:

  def create
    @project = Project.find(params[:project_id])
    @photo = @project.photos.create(params[:photo].permit(:img_file))
    respond_to do |format|
      format.js
      format.html
    end
  end

jquery-file-uploader-rails gem を機能させるための photos.js.coffee:

jQuery ->
  $('#new_photo').fileupload
    dataType: 'script'

create.js.erb

$('#photos').html("<%= j render(@photo) %>");

_photo.html.haml

.photo
  - @project.photos.each do |photo|
    = image_tag photo.img_file.thumb
    = link_to 'Remove', photo, data: { confirm: "Are you sure?" }, method: :delete

というわけで写真アップできます。しかし、alert('help'); だけを入れても、私の ajax は機能しません。私のcreate.js.erbでは、応答しません。私は何を間違っていますか?よろしくお願いします!

更新 現在の状況(Rich Peckの助けを借りて):

私のモデル:

class Project < ActiveRecord::Base
  has_many :photos, dependent: :destroy
  accepts_nested_attributes_for :photos, allow_destroy: true
end

class Photo < ActiveRecord::Base
  belongs_to :project
  validates :img_file, presence: true
  mount_uploader :img_file, ImageUploader
end

プロジェクト管理者:

  def edit
    @project = Project.find(params[:id])
    @project.photos.build
  end

  def update
    @project = Project.find(params[:id])
    @project.update(project_params)
  end

params.require(:project).permit(photos_attributes: [:img_file])

/プロジェクト/編集

  = form_for @project do |f|
    = f.fields_for :photos do |p|
      = p.file_field :img_file, multiple: true, id: 'new_photo'       
  #photos
    = render 'photos/photo'

/写真/_写真

.photo
  = image_tag photo.img_file.thumb if photo.img_file?
  = link_to 'Remove', photo, data: { confirm: "Are you sure?" }, method: :delete

/photos/create.js.erb

$('#photos').html("<%= j render(@photo) %>");

/javascripts/photos.js.coffee

jQuery ->
  $('#new_photo').fileupload
    dataType: 'script'
4

3 に答える 3

0

使用する

$('#photos').html(escape_javascript("<%= j render(@photo) %>"));

http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-escape_javascriptを参照してください

于 2016-01-24T10:22:43.867 に答える