2013-02-23 67 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