Передать переменные в рельсы JavaScript
Использование ролей http://railscasts.com/episodes/324-passing-data-to-javascript?autoplay=true
передать переменную из моего контроллера в JavaScript.
У меня есть кнопка, когда я нажимаю на нее, я хочу, чтобы она показывала количество голосов.
Я использую гон.
Однако, когда я пытаюсь запустить его, мое предупреждение говорит, что переменная не определена, даже если я установил ее в контроллере
_source.html.erb
<div class="panel-body">
<%= include_gon(:init => true) %>
<%=source.source %>
<% @count = pluralize(source.upvotes.count,"upvote") %>
<div id="count"><%= @count %></div>
<%= button_to '+1', upvote_source_path(source), method: :post,remote: true %>
<p><%= link_to "delete", [source.fact, source], method: :delete, data:{confirm: "are you sure?"} %></p>
</div>
application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Sourcemonkey</title>
<%= include_gon(:init => true) %>
<%= csrf_meta_tags %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>
<body>
<%= yield %>
</body>
</html>
sources_controller.rb -> действие upvotes
def upvote
@source = Source.find(params[:id])
@source.upvotes.create
gon.count = @source.upvotes.count
respond_to do |format|
format.js {render :js =>"upDateCount()"}
format.html { redirect_to :none}
end
end
upvote.js.erb
function upDateCount(){
alert(gon.count)
}
routes.rb
Rails.application.routes.draw do
# mount Ckeditor::Engine => '/ckeditor'
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
root to: "facts#index"
resources :facts do
resources :sources
end
resources :sources do
member do
post 'upvote'
end
end
resources :upvote
end
Цените идеи, спасибо
1 ответ
Решение
В этом случае может быть проще передать подсчет голосов upDateCount
format.js {render :js =>"upDateCount(#{@source.upvotes.count})"}
и использовать там аргумент вместо gon
данные.