我意识到有几个类似的问题,但它们似乎都没有解决嵌套资源的问题。我对ROR很陌生,我正在尝试实现类似/不同于使用acts_as_votable gem的ajax。我有点理解ajax在Rails中是如何工作的,但我似乎在自己实现它时遇到了问题。
结构
我的应用程序有一个Q列表,每个都有一个As列表。用户可以将书签/取消签名'一个问题或者'喜欢/不喜欢'一个答案。 ' Downvoting'不允许像stackoverflow中的答案 - 用户只能撤消'他们的投票。
当前尝试
对于问题,这就是我的show.html.erb的摘录。它不是一个单独的部分文件。它在节目视图中。:
<% @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
这是我在this blog的大力帮助下制作的,我不知道该放在哪里:
$(“#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} ) %>”);
=&GT;但我认为一切都应该是@ question.answer.id,因为答案嵌套在问题中 - &gt;我完全糊涂了。但如果我使用@ question.answer.id,那么{answer:@answer}这个部分应该是什么样的?
部分是(_likes.html.erb)
<div class="num-votes">
<%= answer.votes_for.size %> Likes
</div>
所以我对一些事情感到困惑:
我怎样才能让它发挥作用? (目前似乎并没有做任何事......而且心脏也没有显示出来。)
提前致谢。
答案 0 :(得分:0)
你的js应该在html.erb之类的模板中,但是js.erb。所以这是js
auto ptr_ = ptr.operator->();
auto func_ = &decltype(ptr)::element_type::func;
ptr_->*func_(std::move(ptr));
应该在&#34; views / answers / upvote.js.erb&#34;但是我不确定,但是如果你使用命令&#39; rails routes&#39;更新你的帖子,你就会有回复
答案 1 :(得分:0)
我相信你在迭代时没有得到正确的id,而是总是在javascript文件上使用@ answer.id。
这可能会有所帮助: