添加AJAX到Rails 4喜欢/不同于带计数器的按钮

时间:2015-01-15 20:18:02

标签: javascript jquery ruby-on-rails ajax

想知道我是否可以尝试将ajax添加到我的喜欢/不同功能中。现在一切正常(没有ajax),但我想添加ajax,因此无论何时点击like / different都会避免页面重新加载。我已经绞尽脑汁待了好几个小时,在堆栈溢出和其他任何一般情况下阅读有关这方面的所有相关问题,但无济于事。所以任何帮助都将不胜感激。

我有一个Project,User,Likes模型(以及其他),用户可以点击喜欢/不同(我使用link_to helper with partial)特定项目和计数器显示整体喜欢。

视图/项目/ _like_button.html.erb

<div id="like_or_unlike">
<% if @project.liked?(current_user) %>
  <% like = @project.likes.where(:user_id => current_user.id).first %>
  <div class="unlike_button">
  <%= link_to "UnLike", like_path(id: like.id, project_id: @project.id), :method => :delete %>
  </div>
<% else %>
  <%= link_to "Like", project_likes_path(@project), :remote => true, :method => :post %>
<% end %>
</div>

控制器/ likes_controller.rb

class LikesController < ApplicationController
  def index
    @user = current_user
    @projects = Project.all
  end

  def create
    @project = Project.find(params[:project_id])
    Like.create(:project => @project, :user => current_user)
    respond_to do |format|
      format.html { redirect_to project_path(@project), :notice => "Liked!" }
      format.js { render '/projects/show.js.erb' }
    end
  end

  def destroy
    @project = Project.find(params[:project_id])
    like = Like.find(params[:id])
    like.destroy
    respond_to do |format|
      format.html { redirect_to project_path(@project), :notice => "Unliked!" }
      format.js { render '/projects/show.js.erb' }
    end
  end
end

视图/项目/ show.js.erb

$('#like_or_unlike').html('<%= j(render partial: '/projects/like_button') %>');
$('.likeit').html('<%= @project.likes.count %>');

我知道上面的show.js.erb是不正确的,我对于应该调用什么或应该指向什么感到困惑。同样,我知道我可能缺少一个???。js文件来处理ajax请求。再次,非常感谢任何有关如何处理此问题的帮助或指导,谢谢!

1 个答案:

答案 0 :(得分:0)

您在到达respond_to块之前重定向请求。 redirect_to之后的任何内容都无法运行。您还缺少end语句来关闭respond_to块。我假设您只想在HTML请求上重定向用户。如果是这样,请将createdestroy方法的结尾更改为:

respond_to do |format|
  format.html { redirect_to project_path(project), :notice => "Some message" }
  format.js { render 'your_javascript_file' }
end

现在您需要一些Javascript文件来实际更改网页。您是否需要一个或两个Javascript文件取决于您以及您希望每个链接在单击后如何表现。