2017-04-12 1 views
0

J'ai ce lien d'aideComment afficher une aide link_to que si elle retourne> 0

link_to "", product_path(product, anchor: "disqus_thread"), data: { "disqus-identifier" => "#{url_for([product, {only_path: false}])}" }, class: "no-underline bold grey-text text-darken-3 margin-left" 

mise en page: application.rb

%script{id: "dsq-count-scr", src: "https://url.disqus.com/count.js", async: "async"} 

_disqus.html.erb

<div class="col-lg-8 col-lg-offset-2 big-top-space margin-bottom"> 
    <div id="disqus_thread"></div> 
    <script> 
    var disqus_shortname = 'yourname'; 
    var disqus_identifier = '<%= url_for([product, {only_path: false}]) %>'; 
    var disqus_title = '<%= product.name %>'; 
    var disqus_url = '<%= url_for([product, {only_path: false}]) %>'; 
    (function() { // DON'T EDIT BELOW THIS LINE 
    var d = document, s = d.createElement('script'); 
    s.src = 'https://url.disqus.com/embed.js'; 
    s.setAttribute('data-timestamp', +new Date()); 
    (d.head || d.body).appendChild(s); 
    })(); 
</script> 
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript> 

</div> 

et tout fonctionne bien, je reçois un nombre, le nombre est le compteur de commentaires disqus de chaque poste dans ma vue d'index, mais comment afficher uniquement le nombre si est supérieur à 0? si est égal à 0 Je ne veux pas le montrer dans la vue. Quelqu'un sait comment résoudre ce problème? Merci beaucoup

j'ai essayé avec ceci:

ajouter cette colonne à des produits COMMENT_COUNT: integer

j'ai changé mon _disqus.html

<div class="col-lg-8 col-lg-offset-2 big-top-space margin-bottom"> 
     <div id="disqus_thread"></div> 
     <script> 
     var disqus_shortname = 'yourname'; 
     var disqus_identifier = '<%= url_for([product, {only_path: false}]) %>'; 
     var disqus_title = '<%= product.name %>'; 
     var disqus_url = '<%= url_for([product, {only_path: false}]) %>'; 

     var disqus_config = function() { 
    this.callbacks.onNewComment = [ 
     function() {   
     $.ajax({ 
      method: "PATCH", 
      url: '<%= product_path(product) %>', 
      data: {increment: "comment_count"} 
     }) 
     } 
    ]; 
}; 
     (function() { // DON'T EDIT BELOW THIS LINE 
     var d = document, s = d.createElement('script'); 
     s.src = 'https://url.disqus.com/embed.js'; 
     s.setAttribute('data-timestamp', +new Date()); 
     (d.head || d.body).appendChild(s); 
     })(); 
    </script> 
    <noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript> 

    </div> 

Product_controller

def update  
    product = Product.find(params[:id]) 
    product.update(update_product) 
    end 
def update_product 
    params.permit(:comment_count) 
end  

source: https://help.disqus.com/customer/portal/articles/466258-capturing-disqus-commenting-activity-via-callbacks

mais je reçois cette erreur

Started PATCH "/products/12" for ::1 at 2017-04-12 17:44:38 -0500 
Processing by ProductsController#update as */* 
Parameters: {"increment"=>"comment_count", "id"=>"12"} 
ShoppingCart Load (0.0ms) SELECT "shopping_carts".* FROM "shopping_carts" WH 
ERE "shopping_carts"."id" = ? LIMIT 1 [["id", 102]] 
Product Load (0.0ms) SELECT "products".* FROM "products" WHERE "products"."i 
d" = ? LIMIT 1 [["id", 12]] 
CACHE (0.0ms) SELECT "products".* FROM "products" WHERE "products"."id" = ? 
LIMIT 1 [["id", "12"]] 
Unpermitted parameters: increment, id 
(0.0ms) begin transaction 
User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 
1 [["id", 1]] 
(0.0ms) commit transaction 
Rendered products/update.haml within layouts/application (0.0ms) 
(0.0ms) SELECT COUNT(*) FROM "products" INNER JOIN "in_shopping_carts" ON "p 
roducts"."id" = "in_shopping_carts"."product_id" WHERE "in_shopping_carts"."shop 
ping_cart_id" = ? [["shopping_cart_id", 102]] 
Rendered partials/_unlogged.haml (15.5ms) 
Rendered partials/_nav.haml (765.8ms) 
Completed 200 OK in 3476ms (Views: 3448.8ms | ActiveRecord: 0.0ms) 

paramètres non autorisée est: incrément, id

dans la console

COMMENT_COUNT: néant

quelqu'un peut m'aider?

+0

Comment récupérer-vous les commentaires Disqus contre? Avez-vous une méthode Model? –

+0

je les obtiens avec ce script dans mon script applicacion.layout% {id: "dsq-count-scr", src: "https://urlyoururl.disqus.com/count.js", async: "async"} –

+0

Je ne reconnais pas ce code, veuillez fournir plus de détails sur ce script (sur la question). –

Répondre

1

La meilleure façon que je peux penser à résoudre ce problème est à:

  • ajouter un attribut comment_count à votre base de données
  • ajouter un rappel Disqus onNewComment mettre à jour le nombre de commentaires sur votre dossier.

Avec Javascript, vous pouvez ajouter un rappel:

var disqus_config = function() { 
    this.callbacks.onNewComment = [ 
     function() { 
     alert(comment.id); 
     alert(comment.text); 
     $.ajax({ 
      method: "PATCH", 
      url: "<%= product_path(product) %>", 
      data: {increment: "comment_count"} 
     }) 
     } 
    ]; 
}; 

vous sauriez alors le nombre de commentaires à l'avenir.

documentation: https://help.disqus.com/customer/portal/articles/466258-capturing-disqus-commenting-activity-via-callbacks

Modifier votre contrôleur à:

def update  
    product = Product.find(params[:id]) 
    if params[:comment_count] 
    product.increment!(:comment_count) 
    else 
    product.update(update_product) 
    end 
end 
+0

J'ai essayé avec votre frère de l'information, mais n'a pas travaillé, j'ai déjà mis à jour ma question, quelle route dois-je écrire? –

+0

Vous devez exécuter 'rake routes' et trouver celui pour la mise à jour d'un produit. probablement 'products_path' avec une méthode' patch'. –

+0

frère, je vous l'ai dit mais je reçois 401 Terminé 401 non autorisé en 391ms (ActiveRecord: 0.0ms). J'ai déjà mis à jour ma question –

0

Vous ne pouvez pas - au moins pas dans la façon dont vous essayez.

link_to "", product_path(product, anchor: "disqus_thread"), data: { "disqus-identifier" => "#{url_for([product, {only_path: false}])}" }, class: "no-underline bold grey-text text-darken-3 margin-left" 

Ceci est évalué sur votre serveur Rails avant que la page ne soit envoyée au navigateur.

<script> 
    var disqus_shortname = 'yourname'; 
    var disqus_identifier = '<%= url_for([product, {only_path: false}]) %>'; 
    var disqus_title = '<%= product.name %>'; 
    var disqus_url = '<%= url_for([product, {only_path: false}]) %>'; 
    (function() { // DON'T EDIT BELOW THIS LINE 
    var d = document, s = d.createElement('script'); 
    s.src = 'https://url.disqus.com/embed.js'; 
    s.setAttribute('data-timestamp', +new Date()); 
    (d.head || d.body).appendChild(s); 
    })(); 
</script> 

Ce javascript est exécuté plus tard dans le client (le navigateur des utilisateurs) - à ce moment, la page est déjà envoyé par le serveur.

Si vous voulez savoir quand vous affichez sur le serveur s'il y a des commentaires, vous devez appeler le Disqus API depuis le serveur.

+0

ok mais comment puis-je le résoudre? Je ne sais pas comment le faire:/ –

+0

Son appelé lecture ... – max