我无法通过Ajax请求重新呈现部分内容。我现在可以通过js文件传递其他内容,例如alert(),甚至更改当前div中的html。但是当我尝试渲染部分(在这种情况下为评级)时,什么都不会刷新。部分在它们在分页和加载时渲染的意义上工作正常,但是在我点击upvote或downvote之后却没有。我正在使用嵌套的部分,以便首先渲染_tracks,然后_rating。这就是我所拥有的......我错过了什么?
vote.js.erb
$(".rating").html("<%= escape_javascript(render(:partial => 'rating')) %>")
有了这个,我也是这些,但没有成功。
$(".rating").html("<%= escape_javascript(render("rating")) %>")
$(".rating").html("<%= escape_javascript( render( :partial => "rating", :locals => { :track => track }) ) %>")
另一方面,这确实有效:
$(".rating").html("<%= escape_javascript("test text here) %>")
_tracks.html.erb
<% for track in @tracks %>
<div class="span4">
<div class="track">
<div class="rating">
<%= render :partial => "rating", :locals => { :track => track } %>
</div>
<a href="<%= track.youtube_link %>"></a>
<% if current_user.admin? %>
<%= link_to "delete", track, method: :delete, confirm: "You sure?" %>
<%= link_to "edit", edit_track_path(track) %>
<% end %>
</div>
</div>
<% end %>
_rating.html.erb
<% vt = track.votetype(current_user) %>
<% if vt != "up" %>
<%= link_to image_tag("up_arrow.png", alt: "Upvote"), vote_path(track, :type => "up"), :remote => true %>
<% elsif %>
<%= "up" %>
<% end %>
<%= track.rating %>
<% if vt != "down" %>
<%= link_to image_tag("down_arrow.png", alt: "Downvote"), vote_path(track, :type => "down"), :remote => true %>
<% elsif %>
<%= "down" %>
<% end %>
跟踪控制器
@vote.update_attributes(:vote_type => params[:type])
if @vote.save
respond_to do |format|
format.html {redirect_to :back}
format.js
end
答案 0 :(得分:0)
$(".rating").html("<%= escape_javascript( render( :partial => "rating", :locals => { :track => track }) ) %>")
需要
$(".rating").html("<%= escape_javascript( render( :partial => "rating", :locals => { :track => @track }) ) %>")
@符号传递变量,与上一个不需要它的部分中的for循环不同。现在工作正常。