2016-09-09 1 views
0

Utilisation des rails fonte http://railscasts.com/episodes/324-passing-data-to-javascript?autoplay=truevariables passe à javascript rails

passer une variable de mon contrôleur javascript.

J'ai un bouton, quand je clique dessus, je veux qu'il montre le nombre de votes.

Im utilisant gon.

Lorsque je tente de l'exécuter cependant, mon alerte dit que la variable est pas définie même si je l'ai mis dans le contrôleur

_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 l'action

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 

idées Apprécions, grâce

Répondre

1

Dans ce cas, il pourrait être plus facile de passer à upvote compter upDateCount

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

et d'utiliser le Avant l'argument au lieu de gon données.

+0

Cela fonctionne, merci !!!! Im curieux de savoir pourquoi ce cas est spécial et gon n'est pas conseillé si vous le savez? – mogoli

+0

Je n'utilise pas 'format.js', j'ai tendance à répondre avec des données, pas des scripts, c'est pourquoi je ne le sais pas à coup sûr. Je suppose que les scripts rendus par les contrôleurs sont évalués dans un contexte différent de celui des scripts statiques. – mrzasa

+0

Merci pour l'explication, Im commençant par des rails, alors appréciez la perspicacité – mogoli