繁体   English   中英

Acts_As_Votable Ajax请求

[英]Acts_As_Votable Ajax Request

试图弄清楚如何让ajax使用我的Acts_As_Votable按钮。

这就是我现在所拥有的。


post_controller.rb

def favorite
  @post = Post.find(params[:id])
  @post.upvote_from current_user
  respond_to do |format|
    format.js
  end 
end

def unfavorite 
  @post = Post.find(params[:id])
  @post.unvote_by current_user
  respond_to do |format|
   format.js
  end 
end

_post.html.erb

<% if current_user.voted_on? post  %>
  <%= link_to '<i style="color: red" class="fa fa-star"></i> Favorited'.html_safe, unfavorite_post_path(post), method: :put, remote: true, id: "unfavorite" %>
<% else %> 
  <%= link_to '<i class="fa fa-star"></i> Favorite'.html_safe, favorite_post_path(post), method: :put, remote: true, id: "favorite" %>
<% end %>

favorite.js.erb&unfavorite.js.erb

$('#favorite').html("<i style='color: red' class='fa fa-star'></i> Favorited");

$('#unfavorite').html("<i class='fa fa-star'></i> Favorite");

现在我有部分工作。 我有两个问题。

  1. 每个页面包含多个帖子。 我怎么能告诉format.js.erb文件来定位那个spectific post的favoirte按钮。 现在,jQuery只更改了第一个帖子按钮,无论我在哪里点击页面。 我已经尝试将link_to id设置为收藏夹<%= post.id%>,然后在format.js文件中使用收藏夹<%= post.id%>,但这不起作用。
  2. 我想更改format.js文件以将实际按钮放入div而不是仅更改其文本。 因此,用户无需刷新页面即可切换收藏夹和不喜欢的内容。 我已经尝试将link_to按钮放在.html(“”)部分内,但这不起作用。 我不确定如何使用ajax提交帖子请求。

感谢您的帮助! 如果您需要更多代码或我不清楚某些事情,请告诉我。

id必须在一个页面中是唯一的。 您应该能够将post.id附加到您的链接:

_post.html.erb

<% if current_user.voted_on? post  %>
  <%= render 'unfavorite_link', post: post %>
<% else %> 
  <%= render 'favorite_link', post: post %>
<% end %>

_favorite_link.html.erb

<%= link_to '<i class="fa fa-star"></i> Favorite'.html_safe, favorite_post_path(post), method: :put, remote: true, id: "favorite-#{post.id}" %>

_unfavorite_link.html.erb

<%= link_to '<i style="color: red" class="fa fa-star"></i> Favorited'.html_safe, unfavorite_post_path(post), method: :put, remote: true, id: "unfavorite-#{post.id}" %>

而不是仅使用AJAX设置html ,您可以使用替换整个链接的replaceWith ,而不仅仅是其内部HTML:

favorite.js.erb

$('#favorite-<%= @post.id %>').replaceWith('<%= escape_javascript render 'unfavorite_link', post: @post %>');

unfavorite.js.erb

$('#unfavorite-<%= @post.id %>').replaceWith('<%= escape_javascript render 'favorite_link', post: @post %>');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM