URL-адрес скрепки не работает с image_tag - PullRequest
0 голосов
/ 30 января 2012

Я знаю, что это звучит как глупый вопрос, но я действительно не вижу основной причины сейчас ...

Я только что понял, чтобы загрузить изображение с помощью ajax с помощью jQuery-File-Загрузите и Paperclip, все достаточно хорошо, файл загружен, запись в базе данных успешно сохранена.

Единственная проблема заключается в том, что <%= image_tag @attached_image.image.url %> не работает в моем create.js.erb, с помощью которого я хотел бы сделать запись в представлении с помощью JavaScript.Но URL экземпляра загруженного файла правильный.

это работает , если я это сделаю:

$("#attached-images").append("<li><img src='http://localhost:3000<%= @attached_image.image.url %>'></img></li>")

, но не работает , если яdo, который взят из Paperclips Github Readme:

$("#attached-images").append("<li><%= image_tag @attached_image.image.url %></li>")

, и в консоли не возникает никаких исключений, просто ничего не появляется.Я действительно в замешательстве ... а есть ли способ отладки обработки js.erb в браузере?

Мой взгляд:

<div id="upload-and-insert-image-dialog"> 
<%= form_for :attached_image, :remote => true, :url => attached_images_path(), :html => { :class => "upload", :multipart => true } do |f| %>
  <%= f.file_field :image %>
<% end %>
</div>
<ul id="attached-images">
</ul>

Мой контроллер:

class AttachedImagesController < ApplicationController
  def create
    @attached_image = AttachedImage.new(params[:attached_image])

    respond_to do |format|
      if @attached_image.save
        format.js
      else
        format.js { render 'attached_images/create_error' }
      end
    end
  end
end

Мои прикрепленные_изображения / create.js.erb:

$("#attached-images").append("<li><%= image_tag @attached_image.image.url %></li>")

Моя модель:

class AttachedImage < ActiveRecord::Base
  belongs_to :attachable, :polymorphic => true

  has_attached_file :image
end

Ответы [ 3 ]

2 голосов
/ 31 января 2012

Я обнаружил проблему, потому что я пропустил функцию escape_javascript, следующий код работает очень хорошо.

$("#attached-images").append("<li><%= escape_javascript(image_tag(@attached_image.image.url)) %></li>")

большое спасибо @varatis, вы напоминаете мне об этом.

1 голос
/ 30 января 2012

Может быть, что-то вроде этого будет работать:

$('#attend-images').append('<%= escape_javascript(render partial: 'images') %>');

, где _images.html.erb частично в той же папке, которая выглядит следующим образом:

<li><%= image_tag @attached_image.image.url %></li>

Яне уверен, что этот точный синтаксис будет работать, хотя.Я делал подобные вещи, но в худшем случае, вы хотите просто поместить все ваши прикрепленные изображения в частичное и обновить его, как только получите запрос (в вашем create.js.erb):

$('#attend-images').html('<%= escape_javascript(render partial: 'images') %>');

, а затем _images.html.erb - это просто часть, содержащая ваш ul изображений (поскольку я предполагаю, что вы хотите добавить к нему):

<% for image in @images %>
  <ul>
  ....
  <li><%= image_tag image.image.url %></li>
  ....
  </ul>
<% end %>
0 голосов
/ 31 января 2012

Это потому, что внутри @attached_image.image.url хост отсутствует, поэтому используйте помощник image_path, который image_tag использует для генерации URL для тега html img. Это не проблема для хранилища s3.

...