2016-09-09 2 views
0

Использование рельсов отливать http://railscasts.com/episodes/324-passing-data-to-javascript?autoplay=trueпередать переменные яваскрипта рельсам

передать переменную из моего контроллера JavaScript.

У меня есть кнопка, когда я нажимаю на нее, я хочу, чтобы она показывала количество upvotes.

Im using gon.

Когда я пытаюсь запустить его, однако, мое предупреждение говорит переменная не определена, даже если я установить его в контроллере

_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

В данном случае это может быть легче пройти upvote рассчитывать на upDateCount

format.js {render :js =>"upDateCount(#{@source.upvotes.count})"} 

и использовать вместо аргументов вместо gon.

+0

Это работает, спасибо !!!! Мне любопытно узнать, почему этот случай особенный, и gon не рекомендуется, если вы знаете? – mogoli

+0

Я не использую 'format.js', я склонен отвечать данными, а не скриптами, поэтому я этого не знаю точно. Я полагаю, что скрипты, отображаемые контроллерами, оцениваются в другом контексте, чем статические сценарии. – mrzasa

+0

Спасибо за объяснение, я начинаю с рельсов, поэтому оцените понимание – mogoli

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