使用Rails 3.2将包含项目计数的徽章添加到我的Navbar

时间:2015-06-18 15:27:23

标签: ruby-on-rails twitter-bootstrap ruby-on-rails-3.2

我正在寻找有关向<& @projects.each do | project | %>

添加徽章的最佳方式的指导/示例

我希望此徽章显示页面上所有项目的项目计数。

视图/项目/ index.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>

视图/布局/ _header.html.erb

<span class = "badge">projects.total</span>

我意识到我可能需要一个&#34;总计&#34; projects.item_count的变量。

然后我可能想把那个&#39; projects.total变量放在public Cursor query (boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)旁边

寻找适当/最佳方式来解决所有这些问题。

1 个答案:

答案 0 :(得分:1)

加了:

要获取模型的记录总数,只需在模型类上调用.count即可。

irb(main):004:0> User.count
   (0.8ms)  SELECT COUNT(*) FROM "users"
=> 1

然而,这不能用于关联,因为关联的对象属于实例 - 而不属于类。因此Project.items.count不起作用,Item.count不起作用。这同样适用于集合(@projects.items.count # error)。

如果您需要项目的项目数:

最简单的方法是:

<span class="badge"><%= project.items.size %></span>

我们使用.size instead of .length or .count,因为它很聪明,如果已经加载了项目,它将不会导致额外的SQL查询。

请注意project是Project的实例。

如果您打算在视图中的其他区域使用这些项目,可以将其与.joins or .includes query一起使用。

@products = Product.joins(:items).all

如果你没有使用这些物品......

如果未加载它们,则每个项目将导致一次额外的SQL查询。为避免这种情况,您可以使用所谓的计数器缓存。

class Item < ActiveRecord::Base
  belongs_to :project, counter_cache: true
end
  

虽然在模型上指定了:counter_cache选项   包括belongs_to声明,必须添加实际列   到相关的模型。   http://guides.rubyonrails.org/association_basics.html

您可以使用以下迁移创建列:

$ rails g migration AddItemsCountToProjects items_count:integer