2013-02-23 3 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 (идентификатор может быть другим), вместо того, чтобы просто обновлять div. Что я делаю не так? Я новичок в Rails, так что я мог бы что-то совершенно очевидно, не хватает ...

EDIT: Вот моя структура папок:

Мое мнение: 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 %>"); 

To:

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

Спасибо, это решило мою проблему! –

+0

Я рад, что это помогло. –

1

Добавить: удаленный => верно

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

Также - читать на рельсы маршрутов, чтобы увидеть, как настроить маршрут для PUT конфессиями/upvote.

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

+0

Теперь это просто перенаправляет меня на '/ upvote? Id = 9 & remote = true' –

+0

Извините, если это не в порядке. См. Редактирование. {: method =>: put,: remote => true} – mscccc

+0

Еще просто перенаправляет меня ... Вы видели мое редактирование? У меня есть upvote.js.erb в правильной области? –

Смежные вопросы