我正在从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
答案 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