Rails 4中的特定AJAX请求失败

时间:2014-05-30 12:29:56

标签: ruby-on-rails ajax ruby-on-rails-4

这一直困扰着我一段时间。希望有人能帮忙......

我有一个如下的ajax请求(这个完美无缺)。

控制器:

def destroy
    @property = Property.find(params[:property_id])
    @property_asset = @property.property_assets.find(params[:id])
    @property_asset.destroy

    property = Property.find(params[:property_id])
    @images = property.property_assets.asset_content_type_starts_with('image')
    @videos = property.property_assets.asset_content_type_starts_with('video')
    @docs = property.property_assets.asset_content_type_starts_with('application')


    respond_to do |format|
      format.html
      format.js
      flash[:notice] = "Deleted"
    end
  end

Destroy.js.haml:

$("#images").html("#{escape_javascript(render 'images')}");
$("#videos").html("#{escape_javascript(render 'videos')}");
$("#docs").html("#{escape_javascript(render 'docs')}");

此方法在调用时会在页面上呈现部分内容,而无需进行刷新。正是我想要的。

在同一页面上,我有一个调用Create方法的文件上传:

 def create

    @property = Property.find(params[:property_id])
    @property_asset = @property.property_assets.create

    property = Property.find(params[:property_id])
    @images = property.property_assets.asset_content_type_starts_with('image')
    @videos = property.property_assets.asset_content_type_starts_with('video')
    @docs = property.property_assets.asset_content_type_starts_with('application')

    if @property_asset.save
      if @property_asset.update(property_asset_params)
          respond_to do |format|
            format.html
            format.js

           flash[:notice] = "File added"
         end
      end
    end 
 end

_create.js.haml与上面的destroy文件相同,但不适用于任何渲染。所以,如果我只是尝试

$("#images").html("#{escape_javascript(render 'images')}");

create方法带我去create.js.haml很好,我知道如果这样,因为我可以输入一个console.log并且它吐出来很好,但添加上面的行和console.log行失败并且它不会渲染。

图像部分是:

- @images.each do |asset|
  = form_for [@property, asset], remote: true do |f|
    - if asset.id.present?
      .row
        .large-2.columns
          %ul.clearing-thumbs{"data-clearing" => ""}
            %li
              %a{href: asset.asset.url}
                %img{src: asset.asset(:thumb)}
        .large-10.columns
          .row
            .large-12.columns         
              = f.text_field :description, :placeholder => 'Description', :id => 'test1'
          .row
            .large-8.columns
              %p
                = f.check_box :private, :id => 'private'
                %label{for: "private"} Private
            .large-2.columns
              = f.submit 'Update', :class => 'button tiny right round', :disabled => '', :html => { :id => "update#{asset.id}" },  :remote => true
            .large-2.columns
              %p.right
                = link_to 'Delete', [@property, asset], method: :delete, :class => 'button tiny right round alert',  :remote => true

如果我需要澄清任何事情,请告诉我。感谢。

日志

这是我刚添加一个简单的console.log的时候。 JS控制台输出正常。一切都好。

(18.8ms)  commit transaction
  Rendered property_assets/create.js.haml (1.9ms)
Completed 200 OK in 4474ms (Views: 13.4ms | ActiveRecord: 169.5ms)

这是我添加

的时候
$("#images").html("#{escape_javascript(render 'images')}");

添加渲染时,log为:

  Rendered property_assets/_images.html.haml (19.0ms)
  Rendered property_assets/create.js.haml (23.6ms)
Completed 200 OK in 4017ms (Views: 34.7ms | ActiveRecord: 54.1ms)

之前的日志完全相同,我使用paperclip将文件添加到PropertyAsset中,并且我有papertrail跟踪版本。渲染失败时,我需要刷新页面,以便图像显示在列表中。

0 个答案:

没有答案