我意识到有几个类似的问题,但似乎都没有解决嵌套资源的问题。我对 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>
所以我对一些事情感到困惑:
- _likes.html.erb 和 like.js.erb 在我的项目目录中的位置(在答案中?在问题中?)
- 嵌套答案时如何编写我的 like.js.erb 文件(尝试了几次但都失败了:()
我怎样才能让它工作?(目前 like 什么都不做......而且心脏也没有显示出来。)
提前致谢。