У меня трудное время, пытаясь заставить меня частично обновить нажатие на кнопку. Я хочу просто обновить 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
Спасибо, это решило мою проблему! –
Я рад, что это помогло. –