[英]Rails Acts_as_votable Gem Like/Unlike Buttons with Ajax
[英]Like/Unlike using acts_as_votable gem and ajax for nested resources on Rails
我意识到有几个类似的问题,但是似乎没有一个问题是使用嵌套资源来解决的。 我对ROR还是很陌生,我正在尝试使用带acts_as_votable gem的 ajax实现类似/不一样。 我有点理解ajax在Rails中是如何工作的,但是我似乎很难独自实现它。
结构
我的应用程序有一个Q列表,每个Q都有一个As列表。 用户可以“添加/取消添加”问题或“喜欢/不喜欢”答案。 不允许像在stackoverflow中那样“下投票”答案-用户只能“撤消”他们的决定票。
当前尝试
这就像我的show.html.erb中的Question的片段。 它不是单独的部分文件。 在显示视图中:
<% @question.answers.each do |answer| %>
*omit*
<% if current_user.id!=answer.user_id %>
<div class="heart-like">
<br>
<!-- Like Button -->
<% if current_user.liked? answer %>
<%= link_to unvote_question_answer_path(@question, answer), id: “like_#{answer.id}”, remote: :true do %>
<span class="fa fa-heart fa-2x"></span>
<% end %>
<% else %>
<%= link_to like_question_answer_path(@question, answer), id: “like_#{answer.id}”, remote: :true do %>
<span class="fa fa-heart-o fa-2x"></span>
<% end %>
<% end %>
<br>
</div>
<% end %>
我的路线:
resources :questions do
member do
get "bookmark"
end
resources :answers do
member do
put "like", to: "answers#upvote"
put "unvote", to: "answers#unvote"
end
resources :comments, only: [:index, :new, :create, :destroy]
end
end
我的答案控制器具有以下两种方法:
def upvote
begin
@question = Question.find(params[:question_id])
@answer = Answer.find(params[:id])
@answer.liked_by current_user
respond_to do |format|
format.html { redirect_to :back }
format.js
end
rescue ActiveRecord::RecordInvalid
render :nothing => true, :status => 404
end
end
# undo prev vote
def unvote
begin
@question = Question.find(params[:question_id])
@answer = Answer.find(params[:id])
@answer.unliked_by current_user
respond_to do |format|
format.html { redirect_to :back }
format.js
end
end
end
这是我在此博客的巨大帮助下制作的js,我不知道将其放在哪里:
$(“#like_<%= @answer.id %>”).removeClass(‘fa fa-heart-o’).addClass(‘fa fa-heart’);
$(“#like_<%= @answer.id %>”).attr(“href”, ‘/answers/<%= @answer.id %>/unlike’);
$(“#likes_<%= @answer.id %>”).html(“<%= j (render partial: ‘answers/likes’, locals: {answer: @answer} ) %>”);
=>但我认为所有内容都应该是@ question.answer.id,因为答案嵌套在问题->中,我对此完全感到困惑。 但是,如果我使用@ question.answer.id,{answer:@answer}这部分应该是什么样?
部分是(_likes.html.erb)
<div class="num-votes">
<%= answer.votes_for.size %> Likes
</div>
所以我对一些事情感到困惑:
我该如何工作呢? (当前之类的东西什么也没做……而且心脏也没有显示出来。)
提前致谢。
您的js应该在html.erb这样的模板中,但是应该在js.erb中。 所以这个js
$("#like_<%= @answer.id %>").removeClass('fa fa-heart-o').addClass('fa fa-heart');
$("#like_<%= @answer.id %>").attr("href", '/answers/<%= @answer.id %>/unlike');
$("#likes_<%= @answer.id %>").html("<%= j (render partial: 'answers/likes', locals: {answer: @answer} ) %>");
应该在“ views / answers / upvote.js.erb”中,但我不确定,但是如果您使用命令“ railsroutes”更新您的路线信息,您将得到回应
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.