2014-05-01 121 views
0

我有一个应用程序与两个模型库和照片,与每张照片属于一个画廊和画廊有很多照片。除jQuery上传以外,一切正常。照片正在上传到图库中,但我必须刷新页面才能看到更新。但是,当我检查响应代码时,我可以看到更新是在服务器端进行的。Rails 4 - jQuery不替换html

PhotosController

def create 
    @gallery = Gallery.find(params[:photo][:gallery_id]) 
    if params[:images] 
     params[:images].each do |image| 
      @gallery.photos.create(image: image) 
      respond_to do |format| 
       format.html { redirect_to @gallery } 
       format.js 
      end 
     end 
    end 
end 

GalleriesController

def show 
    @photo = Photo.new 
    respond_to do |format| 
     format.html # show.html.erb 
     format.js 
    end 
end 

/photos/create.js.erb

$("#photos").html("<%= escape_javascript(render partial: 'shared/photo', locals: {photo: @photo}) %>"); 

/view/galleries/_photos.html.erb

<div id="photos" class="row"> 
    <% @gallery.photos.each do |photo| %> 
     <%= render partial: 'shared/photo', locals: {photo: photo} %> 
    <% end %> 
</div> 

/view/shared/_photo_form.html.erb

<%= form_for(@photo, :remote => true, :html => { multipart: true}) do |f| %> 
    <%= token_tag(nil) %> 
    <%= f.hidden_field :gallery_id, value: @gallery.id %> 
    <%= f.label :image, "Upload images:" %> 
    <%= file_field_tag "images[]", type: :file, multiple: true %> 
    <%= f.submit "Add Photo", class: "btn btn-primary" %> 
<% end %> 

的console.log

Started POST "/photos" for 127.0.0.1 at 2014-05-01 20:34:13 -0400 
Processing by PhotosController#create as */* 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"p3FpgJeHOnqjIKK8I+0WNKv4x7JPqkvdmBPzD9XHmj0=", "photo"=>{"gallery_id"=>"8"}, "images"=>[#<ActionDispatch::Http::UploadedFile:0x0000010594bfa0 @tempfile=#<Tempfile:/var/folders/y_/s9cr1w213wgg68x_3n64gxy800011c/T/RackMultipart20140501-65824-1kr4fcr>, @original_filename="IMAG0376.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"images[]\"; filename=\"IMAG0376.jpg\"\r\nContent-Type: image/jpeg\r\n">]} 
    User Load (1.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1 
    Gallery Load (0.6ms) SELECT "galleries".* FROM "galleries" WHERE "galleries"."id" = $1 LIMIT 1 [["id", "8"]] 
    (0.3ms) BEGIN 
    SQL (0.8ms) INSERT INTO "photos" ("created_at", "gallery_id", "image", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["created_at", Fri, 02 May 2014 00:34:14 UTC +00:00], ["gallery_id", 8], ["image", "IMAG0376.jpg"], ["updated_at", Fri, 02 May 2014 00:34:14 UTC +00:00]] 
    (0.6ms) COMMIT 
Redirected to http://localhost:3000/galleries/8 
Completed 302 Found in 1802ms (ActiveRecord: 3.5ms) 


Started GET "/galleries/8" for 127.0.0.1 at 2014-05-01 20:34:15 -0400 
Processing by GalleriesController#show as */* 
    Parameters: {"id"=>"8"} 
    Gallery Load (0.5ms) SELECT "galleries".* FROM "galleries" WHERE "galleries"."id" = $1 LIMIT 1 [["id", "8"]] 
    Photo Exists (0.5ms) SELECT 1 AS one FROM "photos" WHERE "photos"."gallery_id" = $1 LIMIT 1 [["gallery_id", 8]] 
    Photo Load (0.4ms) SELECT "photos".* FROM "photos" WHERE "photos"."gallery_id" = $1 [["gallery_id", 8]] 
    Rendered shared/_photo.html.erb (1.2ms) 
    Rendered shared/_photo.html.erb (0.8ms) 
    Rendered galleries/_photos.html.erb (9.1ms) 
    Rendered galleries/_photo_form.html.erb (1.3ms) 
    Rendered galleries/show.html.erb within layouts/application (16.0ms) 
    User Load (1.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1 
    Rendered layouts/_navigation_links.html.erb (5.7ms) 
    Rendered layouts/_navigation.html.erb (7.1ms) 
    Rendered layouts/_messages.html.erb (0.1ms) 
Completed 200 OK in 105ms (Views: 98.1ms | ActiveRecord: 2.5ms) 
+0

如果你把'的console.log(“这里”);'为您create.js.erb文件的第一行,它正确地在浏览器中登录?你想确定的第一件事是JS视图是否是渲染。 – subvertallchris

+0

你的'''/ photos/create.js.erb'''响应只会用一张照片替换''#照片''的内容。这是所需的行动? –

+0

用控制台日志更新。我不认为正在调用create.js.erb – fiyah

回答

0

有两个问题。一个用respond_to块,另一个用@photo变量。

create.js.erb需要一个@photo变量,并且一个没有被创建控制器传递。如下编辑创建控制器可解决此问题。

def create 
    @gallery = Gallery.find(params[:photo][:gallery_id]) 
    if params[:images] 
     params[:images].each do |image| 
     @gallery.photos.create(image: image) 
      @gallery.photos.each do |photo| 
       @photo = Photo.find(photo.id) 
      end 
     end 
    end 
end