想知道我是否可以尝试将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请求。再次,非常感谢任何有关如何处理此问题的帮助或指导,谢谢!
答案 0 :(得分:0)
您在到达respond_to
块之前重定向请求。 redirect_to
之后的任何内容都无法运行。您还缺少end
语句来关闭respond_to
块。我假设您只想在HTML请求上重定向用户。如果是这样,请将create
和destroy
方法的结尾更改为:
respond_to do |format|
format.html { redirect_to project_path(project), :notice => "Some message" }
format.js { render 'your_javascript_file' }
end
现在您需要一些Javascript文件来实际更改网页。您是否需要一个或两个Javascript文件取决于您以及您希望每个链接在单击后如何表现。