Ruby on rails - 充当可投票的JavaScript投票按钮
ruby on rails - Acts as votable javascript vote button
>我正在使用一个名为 acts_as_votable 的 gem 来使我的模型可投票。
目前一切正常。
但是每次有人为帖子投票时,页面都必须刷新。如何在不刷新页面的情况下进行投票。我可以添加一个简单的JavaScript吗?
这是我在控制器中的内容:
def vote
@post = Post.find(params[:post_id])
@post.liked_by current_user
respond_to do |format|
format.html {redirect_to :back }
end
end
以下是我的看法:
<%= link_to “like post", like_post_path(@post), method: :put %>
一个非常简单的版本可能如下所示:
红宝石
def vote
@post = Post.find(params[:post_id])
@post.liked_by current_user
respond_to do |format|
format.html {redirect_to :back }
format.json { render json: { count: @post.liked_count } }
end
end
目录
<%= link_to 'like', vote_path(@post), class: 'vote', remote: true, data: { type: :json } %>
.JS
$('.vote')
.on('ajax:send', function () { $(this).addClass('loading'); })
.on('ajax:complete', function () { $(this).removeClass('loading'); })
.on('ajax:error', function () { $(this).after('<div class="error">There was an issue.</div>'); })
.on('ajax:success', function (data) { $(this).html(data.count); });
这是一个非常基本的版本,显示了基本方法,但它有一些明显的陷阱:
- 没有办法"不投票"
- "加载"指示器不是很好的用户体验;使用JS,我们始终可以显示用户的当前状态,并在后台处理与服务器的同步。
- 视图中的任何 HTML 缓存都会破坏这一点
很简单。拿走你的响应块:
def vote
@post = Post.find(params[:post_id])
@post.liked_by current_user
end
并使您的按钮远程:
<%= link_to “like post", like_post_path(@post), method: :put, remote: true %>
如果您希望在某人投票弹出消息或其他内容时运行脚本,请创建一个文件vote.js.erb
(通过 rails 命名约定)并将其放在 view 文件夹中。你可以把javascript放在那里,当访问控制器操作时,它将运行。
PS,您确定like_post_path
指向vote
控制器的路径吗?
Ruby on Rails为此提供了Ajax帮助程序。例如:
<%= link_to “like post", like_post_path(@post), method: :put, remote: true %>
但是,您需要使用 JavaScript 手动更新计票器。
相关文章:
- Javascript按钮下拉列表
- ASP.NET通过单击JavaScript按钮触发c#事件
- JavaScript按钮/输入/函数,字符串反转
- 测试一个简单的javascript按钮
- 如果函数返回True,则显示Javascript按钮
- 用Javascript按钮替换Javascript超链接
- 从页面javascript按钮运行Node.JS
- 如何在asp.net上应用javascript按钮点击
- Javascript按钮href注入
- 计时器自动运行,而不是单击javascript按钮
- Javascript按钮,在html文本区域中插入一个大黑点(•)
- 单击javascript按钮显示/隐藏Div元素
- 单击Javascript按钮,将值添加到文本框中
- visualforce页面javascript按钮点击不起作用
- 使javascript按钮隐藏或显示内容切换
- 使用 Scrapy 模拟 JavaScript 按钮点击
- Javascript按钮禁用并启用特定时间
- 如果未输入任何内容,则使 JavaScript 按钮不执行任何操作
- 当表为空时禁用 JavaScript 按钮
- javascript按钮在html中不起作用