[英]Updating Elements in Rails with Ajax
该应用程序允许用户对嵌入的视频进行投票。 当用户单击向上和向下箭头时,整个页面将刷新以更新points
。 我几个月来一直试图实施AJAX投票。 我希望你提供最直接的解决方案,即使它不是最有效的。 有任何想法吗?
我的up
和down
的动作,从app/controllers/links_controller
....
def up
@link = Link.find(params[:id])
@link.update_attribute :points, @link.points + 1
redirect_to :back
end
def down
@link = Link.find(params[:id])
@link.update_attribute :points, @link.points - 1
redirect_to :back
end
....
links_list
的极简主义版本,部分来自app/views/links/_links_list
,我使用各种排序方法在其他视图中呈现
<% @links.each do |link| %>
<div class="row">
<div class="span2">
<%= link_to (image_tag ("up.png")), up_link_url(link), :method => :put %>
<%= link.points %>
<%= link_to (image_tag ("down.png")), down_link_url(link), :method => :put %>
</div>
<div class="span8">
<%= link_to strip_tags(link.title), link %>
</div>
</div>
<% end %>
提前感谢您的任何反馈或建议!
Ajax在Rails 3.1中非常容易使用。 这篇文章假设您使用jQuery作为JavaScript驱动程序; 如果你不是,你需要安装jquery-rails gem,但即使对于生产中的应用程序来说,添加一个小宝石也不是什么大不了的事。
你的控制器最终看起来像这样:
....
def up
@link = Link.find(params[:id])
@link.update_attribute :points, @link.points + 1
respond_to do |format|
format.html {redirect_to :back}
format.js
end
end
def down
@link = Link.find(params[:id])
@link.update_attribute :points, @link.points - 1
respond_to do |format|
format.html {redirect_to :back}
format.js
end
end
....
视图更改将非常小:
<% @links.each do |link| %>
<div class="row">
<div class="span2">
<%= link_to (image_tag ("up.png")), up_link_url(link), :method => :put, :remote => true %>
<%= link.points %>
<%= link_to (image_tag ("down.png")), down_link_url(link), :method => :put, :remote => true %>
</div>
<div class="span8">
<%= link_to strip_tags(link.title), link %>
</div>
</div>
您需要在app / views / links /文件夹中添加新文件up.js.erb和down.js.erb,其中包含用于更新页面的JavaScript命令:
$(".span2").html("This post has <%= @link.points %> points.")
如果您决定使用Prototype或其他东西,代码看起来或多或少相同; 唯一的变化是你放在up.js.erb和down.js.erb中的JavaScript,它应该是Prototype-y而不是jQuery-y。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.