【发布时间】:2015-01-17 07:03:04
【问题描述】:
想知道是否可以在尝试将 ajax 添加到我的喜欢/不喜欢功能时获得一些帮助。现在一切正常(没有 ajax),但我想添加 ajax,从而避免在点击喜欢/不喜欢时重新加载页面。我已经绞尽脑汁好几个小时了,在 stackoverflow 和其他任何地方都阅读了有关此问题的所有相关问题,但无济于事。因此,我们将不胜感激。
我有一个项目、用户、喜欢模型(以及其他模型),并且用户可以点击喜欢/不喜欢特定项目(我使用 link_to 助手和部分),并且计数器显示整体喜欢。
视图/项目/_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
views/projects/show.js.erb
$('#like_or_unlike').html('<%= j(render partial: '/projects/like_button') %>');
$('.likeit').html('<%= @project.likes.count %>');
我知道上面的 show.js.erb 是不正确的,而且我完全不知道应该调用什么或应该指向什么。同样,我知道我可能缺少一个 ???.js 文件来处理 ajax 请求。再次感谢任何有关如何解决此问题的帮助或指导,谢谢!
【问题讨论】:
-
只会提到像
<% if @project.liked?(current_user) %>这样的视图中的 if 语句不是一个好习惯。您会注意到,这个简单的 if 语句会在您每次加载页面时进行数据库查询。最好把最初请求的likes数组存入JS,用JS检查是否存在。 -
感谢您的提示和好点,一旦我让这个版本首先工作,肯定会重构。
-
另外提一下:我认为在 Rails 中使用纯 JS 和 ajax 非常笨重并且导致代码复杂。如果你打算在你的应用程序中做一些大事,那么考虑使用 AngularJs。下面是一些关于如何实现它的好例子:github.com/mkwiatkowski/todo-rails4-angularjs、github.com/sectore/CafeTownsend-Angular-Rails。但是,如果它只是一个用于学习的应用程序,那么使用它可能是一种矫枉过正的做法。你必须选择你自己。
-
是的,完全同意并继续前进,我希望朝着 Angular JS 的方向前进。这只是一个学习项目。三个月前我对 ruby/rails 或 JS/AJAX/jQuery 一无所知,但我每天都在学习越来越多的东西。感谢您的提示和链接,非常感谢!
标签: javascript jquery ruby-on-rails ajax