控制器在AJAX期间未呈现show.js.haml

时间:2018-09-10 06:53:45

标签: javascript ruby-on-rails ajax haml ujs

我正在从from_tag(搜索框)进行简单的AJAX调用,并希望在不刷新页面的情况下显示结果。问题是,即使我可以在服务器控制台中看到show动作正在作为JS处理,它仍然呈现HTML而不是js.haml文件。我获得控制器渲染js的唯一方法是将名称更改为show.js。然后,它将按预期工作。 show.js.erb也不起作用。我也尝试过format.js {render layout:false}没有任何运气。在控制器方面,这似乎是一个问题,但我在这里可能是错误的。任何想法表示赞赏!

修改:

该控制器操作正在使用渲染“ show.js.haml”选项。另一个问题是js.haml文件下面的escape_javascript没有执行任何操作。

show.js.haml

$("#main").html("#{escape_javascript(render 'artists/show', locals: {artist: @artist, updates, @updates, reach: @reach, reach_diff: @reach_diff})}");   

控制器

class ArtistsController < ApplicationController

        def index
            if params[:search]
                @artist=Artist.find_by(name: params[:search])
                redirect_to action: "show", id: @artist.id
            else
                @artists= Artist.all
            end
        end

        def show
            @artist= Artist.find(params[:id])
            @updates = @artist.updates.order(created_at: :desc)
            @reach = @artist.reachupdates.order(created_at: :desc)
            @reach_diff= Reachupdate.last_week_diff(@artist.id)

            respond_to do |format|
                format.html
                format.js {render "show.js.haml", layout: false}
            end
        end
    end

1 个答案:

答案 0 :(得分:0)

您需要将$time4=strtotime($sqltime - 14400); // your sqltime minus 4 hours $cleantime = date( 'G:i', $time4);更改为render layout: false

render 'show.js.haml', layout: false

更新

  

我遇到的下一个问题是将ruby对象插入js文件

如果文件def show @artist= Artist.find(params[:id]) @updates = @artist.updates.order(created_at: :desc) @reach = @artist.reachupdates.order(created_at: :desc) @reach_diff= Reachupdate.last_week_diff(@artist.id) respond_to do |format| format.html format.js {render 'show.js.haml', layout: false} end end 部分文件,则问题在于'articles/show'关键字应与locals关键字一起使用才能正常工作。尝试更改此内容

partial

$("#main").html("#{escape_javascript(render 'artists/show', locals: {artist: @artist, updates, @updates, reach: @reach, reach_diff: @reach_diff})}");

只需删除$("#main").html("#{escape_javascript(render partial: 'artists/show', locals: {artist: @artist, updates, @updates, reach: @reach, reach_diff: @reach_diff})}");

locals