使用 Rails 3.2 将带项目计数的徽章添加到我的导航栏
Add Badges with Item Count to my Navbar using Rails 3.2
我正在寻找 guidance/examples 向我的 <ul class = "nav navbar-nav">
添加徽章的最佳方式
我希望此徽章显示页面上所有项目的项目计数。
views/projects/index.html.erb
<& @projects.each do | project | %>
views/layouts/_header.html.erb
<nav class="navbar navbar-inverse navbar-default" role="navigation">
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav">
<li class="active"><%= link_to "Projects", projects_path %> <span class="badge">(current)</span></li>
我知道我可能需要 projects.item_count 的 "total" 变量。
然后我可能想把那个'projects.total变量放在<span class = "badge">projects.total</span>
旁边
正在寻找 proper/best 方法来解决所有这些问题。
已添加:
要获取模型的总记录数,您只需在模型 class.
上调用 .count
irb(main):004:0> User.count
(0.8ms) SELECT COUNT(*) FROM "users"
=> 1
然而,这不能用于关联,因为关联对象属于实例 - 而不是 class。所以 Project.items.count
不起作用,但 Item.count
起作用。这同样适用于集合 (@projects.items.count # error
).
如果您需要项目的项目数:
最简单的方法是:
<span class="badge"><%= project.items.size %></span>
我们使用 .size
instead of .length
or .count
,因为它很聪明,因为如果项目已经加载,它不会引起额外的 SQL 查询。
请注意 project
是项目的一个实例。
如果您打算在视图的另一个区域使用这些项目,您可以将其与 .joins
or .includes
query 一起使用。
@products = Product.joins(:items).all
如果您不使用这些物品...
如果未加载它们,每个项目将导致一个额外的 SQL 查询。为避免这种情况,您可以使用所谓的计数器缓存。
class Item < ActiveRecord::Base
belongs_to :project, counter_cache: true
end
Although the :counter_cache option is specified on the model that
includes the belongs_to declaration, the actual column must be added
to the associated model.
http://guides.rubyonrails.org/association_basics.html
您可以使用以下迁移创建列:
$ rails g migration AddItemsCountToProjects items_count:integer
我正在寻找 guidance/examples 向我的 <ul class = "nav navbar-nav">
我希望此徽章显示页面上所有项目的项目计数。
views/projects/index.html.erb
<& @projects.each do | project | %>
views/layouts/_header.html.erb
<nav class="navbar navbar-inverse navbar-default" role="navigation">
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav">
<li class="active"><%= link_to "Projects", projects_path %> <span class="badge">(current)</span></li>
我知道我可能需要 projects.item_count 的 "total" 变量。
然后我可能想把那个'projects.total变量放在<span class = "badge">projects.total</span>
正在寻找 proper/best 方法来解决所有这些问题。
已添加:
要获取模型的总记录数,您只需在模型 class.
上调用.count
irb(main):004:0> User.count
(0.8ms) SELECT COUNT(*) FROM "users"
=> 1
然而,这不能用于关联,因为关联对象属于实例 - 而不是 class。所以 Project.items.count
不起作用,但 Item.count
起作用。这同样适用于集合 (@projects.items.count # error
).
如果您需要项目的项目数:
最简单的方法是:
<span class="badge"><%= project.items.size %></span>
我们使用 .size
instead of .length
or .count
,因为它很聪明,因为如果项目已经加载,它不会引起额外的 SQL 查询。
请注意 project
是项目的一个实例。
如果您打算在视图的另一个区域使用这些项目,您可以将其与 .joins
or .includes
query 一起使用。
@products = Product.joins(:items).all
如果您不使用这些物品...
如果未加载它们,每个项目将导致一个额外的 SQL 查询。为避免这种情况,您可以使用所谓的计数器缓存。
class Item < ActiveRecord::Base
belongs_to :project, counter_cache: true
end
Although the :counter_cache option is specified on the model that includes the belongs_to declaration, the actual column must be added to the associated model. http://guides.rubyonrails.org/association_basics.html
您可以使用以下迁移创建列:
$ rails g migration AddItemsCountToProjects items_count:integer