2

我很难在按下按钮时让我的部分刷新。我想简单地刷新 div,而不是整个页面。这是我的观点:

<div id="ajax">
  <%= render 'layouts/confessions' %>
</div>

然后在我的部分_confessions.html.erb中,我有一些基本的 html 和两个类似的按钮:

<%= form_tag( { :controller => :confessions, :action => :upvote, :id => conf.id }, { :method => :put } ) do %>
    <%= submit_tag 'Like' %>
<% end %>

我的confession_controller.rb:

def upvote
  @confession = Confession.find(params[:id])    
  Confession.increment_counter :upvotes, @confession
  respond_to do |format|
    format.js
  end
end

最后,upvote.js.erb

$('#ajax').html("<%= escape_javascript(render(:partial => 'confessions')).html_safe %>");

提交到我的数据库的操作正在运行,但页面现在重定向到 /upvote?id=9(id 可以不同),而不是仅仅刷新 div。我究竟做错了什么?我是 Rails 的新手,所以我可能会遗漏一些完全明显的东西......

编辑:这是我的文件夹结构:

我的观点:views/pages/home.html.erb

我的部分:views/layouts/_confessions.html.erb

我的控制器:controllers/confessions_controller.rb

我的 js.erb 文件:views/confessions/upvote.js.erb

rake routes

    confessions GET    /confessions(.:format)            confessions#index
                POST   /confessions(.:format)            confessions#create
new_confession  GET    /confessions/new(.:format)        confessions#new
edit_confession GET    /confessions/:id/edit(.:format)   confessions#edit
 confession     GET    /confessions/:id(.:format)        confessions#show
                PUT    /confessions/:id(.:format)        confessions#update
                DELETE /confessions/:id(.:format)        confessions#destroy
     upvote            /upvote(.:format)                 confessions#upvote
   downvote            /downvote(.:format)               confessions#downvote
       root            /                                 pages#home
4

2 回答 2

4

确保你的 application.js 中有这个

//= require jquery
//= require jquery_ujs

仅供参考:Rails form_for :remote=>true 没有调用 js 方法

然后,改变这个,

$('#ajax').html("<%= escape_javascript(render(:partial => 'confessions')).html_safe %>");

至:

$('#ajax').html("<%= escape_javascript(render(:partial => 'layouts/confessions')).html_safe %>");
于 2013-02-23T11:46:51.457 回答
1

添加 :remote => true

<%= form_tag( { :controller => :confessions, :action => :upvote, :id => conf.id }, { :method => :put, :remote=>true } ) do %>

另外 - 阅读 rails 路线,了解如何设置 PUT 供认/投票的路线。

http://guides.rubyonrails.org/routing.html#adding-more-restful-actions

于 2013-02-23T02:10:49.003 回答