如何仅在 returns > 0 时显示 link_to 助手
How to show a link_to helper only if it returns > 0
我有这个帮手link
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"
布局: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>
并且一切正常我得到一个数字,这个数字是我索引视图中每个 post 的 disqus 评论计数器,但是如果 大于 0,如何只显示该数字? 如果 等于 0 我不想在视图中显示它。有人知道如何解决这个问题吗?非常感谢
我试过这个:
add this column to products comment_count :integer
我改变了我的 _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
但是我得到这个错误
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)
Unpermitted parameters: increment, id
在控制台中
comment_count: nil
有人可以帮助我吗?
你不能 - 至少不能以你尝试的方式。
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"
这是在页面发送到浏览器之前在您的 Rails 服务器上评估的。
<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>
此 javascript 稍后在客户端(用户浏览器)中 运行 - 此时页面已由服务器发送。
如果您想知道在服务器端渲染时是否有任何评论,您需要从服务器调用 Disqus API。
我认为解决此问题的最佳方法是:
- 向您的数据库添加一个
comment_count
属性
- 添加一个 disqus
onNewComment
回调来更新您记录中的评论数。
使用 Javascript 您可以添加回调:
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"}
})
}
];
};
然后你就会知道未来的评论数。
将您的控制器更改为:
def update
product = Product.find(params[:id])
if params[:comment_count]
product.increment!(:comment_count)
else
product.update(update_product)
end
end
我有这个帮手link
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"
布局: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>
并且一切正常我得到一个数字,这个数字是我索引视图中每个 post 的 disqus 评论计数器,但是如果 大于 0,如何只显示该数字? 如果 等于 0 我不想在视图中显示它。有人知道如何解决这个问题吗?非常感谢
我试过这个:
add this column to products comment_count :integer
我改变了我的 _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
但是我得到这个错误
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)
Unpermitted parameters: increment, id
在控制台中
comment_count: nil
有人可以帮助我吗?
你不能 - 至少不能以你尝试的方式。
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"
这是在页面发送到浏览器之前在您的 Rails 服务器上评估的。
<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>
此 javascript 稍后在客户端(用户浏览器)中 运行 - 此时页面已由服务器发送。
如果您想知道在服务器端渲染时是否有任何评论,您需要从服务器调用 Disqus API。
我认为解决此问题的最佳方法是:
- 向您的数据库添加一个
comment_count
属性 - 添加一个 disqus
onNewComment
回调来更新您记录中的评论数。
使用 Javascript 您可以添加回调:
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"}
})
}
];
};
然后你就会知道未来的评论数。
将您的控制器更改为:
def update
product = Product.find(params[:id])
if params[:comment_count]
product.increment!(:comment_count)
else
product.update(update_product)
end
end