2013-02-23 41 views
2

我有一个困难的时间试图让我的部分刷新按钮。我只想刷新div,而不是整个页面。下面是我的看法:Ruby On Rails:Ajax刷新部分不工作

<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 %> 

我confessions_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

确保你在的application.js

//= require jquery 
//= require jquery_ujs 

FYI有这样的:Rails form_for :remote=>true is not calling js method

然后,改变这一状况,

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

要:

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

谢谢,这解决了我的问题! – 2013-02-23 21:01:27

+0

我很高兴它有所帮助。 – 2013-02-25 07:24:51

1

地址:远程=>真

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

而且 - 在轨道上读航线最多见了如何设置PUT供述/给予好评的路线。

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

+0

现在,只是重定向到'/ upvote?id = 9&remote = true' – 2013-02-23 02:15:07

+0

对不起,有错误的顺序。查看编辑。 {:method =>:put,:remote => true} – mscccc 2013-02-23 02:21:03

+0

仍然只是重定向我...你看到我的编辑了吗?我在正确的区域使用upvote.js.erb吗? – 2013-02-23 02:23:26