У меня есть веб-сайт (GiggleTrigger.com), где пользователи могут голосовать за изюминки, которые они считают забавными (нажав кнопку «хихикать»).Это было настроено на вызов ajax, но теперь, после обновления до Rails 3.1, я, кажется, сломал это.Я пытался обновить javascript до jQuery, но он все еще не работает.
Вот старый код javascript (помещен в views / голоса / create.js.rjs):
page.replace_html "vote_total_#{@punchline.id}", "#{@punchline.votes.size}"
Вот попытка обновленного кода (помещена в views / голоса / create.js.erb):
$("#vote_total_#{@punchline.id}").html("<%= escape_javascript render @punchline.votes.size %>");
Вот HTML (помещено в views / punchlines / _punchline.html.erb):
<span id="vote_total_<%= punchline.id %>" class="punchline_votes">
<%= punchline.votes.size %>
</span>
<span id="vote_button">
<%= button_to 'giggle', punchline_votes_path(:punchline_id => punchline), :remote => true %>
</span>
Вот код контроллера (помещен в controllers / VoteController.rb):
class VotesController < ApplicationController
def create
@punchline = Punchline.find(params[:punchline_id])
@vote = @punchline.votes.build params[:vote]
@vote.user = current_user
respond_to do |format|
if @vote.save
format.js
format.html { redirect_to @punchline }
else
format.html { redirect_to root }
end
end
end
end
* Я получаю эту ошибку:
ActionView::Template::Error (undefined method `model_name' for Fixnum:Class):
1: $("#vote_total_#{@punchline.id}").html("<%= escape_javascript render @punchline.votes.size %>");
app/views/votes/create.js.erb:1:in `_app_views_votes_create_js_erb__1782616409977082835_2168430380'
app/controllers/votes_controller.rb:7:in `create
Поскольку это похоже на проблему с передачей целого числа, я добавляюметод .to_s, например:
$("#vote_total_#{@punchline.id}").html("<%= escape_javascript render @punchline.votes.size.to_s %>");
Но я получаю эту ошибку:
ActionView::Template::Error (Missing partial votes/1, application/1 with {:handlers=>[:erb, :builder, :coffee], :formats=>[:js, :html], :locale=>[:en, :en]}. Searched in:
* "/Users/Daniel/Sites/giggle/app/views"
* "/Users/Daniel/.rvm/gems/ruby-1.9.2-p290@giggle/gems/devise-1.5.3/app/views"
):
1: $("#vote_total_#{@punchline.id}").html("<%= escape_javascript render @punchline.votes.size.to_s %>");
app/views/votes/create.js.erb:1:in `_app_views_votes_create_js_erb__1782616409977082835_2187483480'
app/controllers/votes_controller.rb:7:in `create'
Я пытаюсь добавить частичноевот так:
$("#vote_total_#{@punchline.id}").html("<%= escape_javascript render :partial => 'punchline', :object => @punchline.votes.size %>");
Но тогда я получаю эту ошибку:
ActionView::Template::Error (Missing partial votes/punchline, application/punchline with {:handlers=>[:erb, :builder, :coffee], :formats=>[:js, :html], :locale=>[:en, :en]}. Searched in:
* "/Users/Daniel/Sites/giggle/app/views"
* "/Users/Daniel/.rvm/gems/ruby-1.9.2-p290@giggle/gems/devise-1.5.3/app/views"
):
1: $("#vote_total_#{@punchline.id}").html("<%= escape_javascript render :partial => 'punchline', :object => @punchline.votes.size.to_s %>");
app/views/votes/create.js.erb:1:in `_app_views_votes_create_js_erb__1782616409977082835_2185760740'
app/controllers/votes_controller.rb:7:in `create'
Когда я нажимаю кнопку хихиканья, голос добавляется кобъект модели, но он не обновляет представление, пока я не обновлю страницу.Очевидно, я хочу, чтобы это происходило через ajax без обновления.Спасибо!