【问题标题】:Add number of records in belongs_to relationship in Rail app?在 Rail 应用程序的 belongs_to 关系中添加记录数?
【发布时间】:2010-10-23 10:51:07
【问题描述】:

我有一个 Rails 简单应用程序,它有两个主要模型。一个人模型和一个礼物模型。礼物属于人,人有很多礼物。

我目前(在人员索引视图中)使用以下代码列出数据库中的所有人员:

<% for person in @people %>
<li><%= link_to h(person.name), person %></li>
<% end %>

我想做的是将与某人相关的礼物数量放在他们的名字旁边的括号中。示例:

Danny McC (10)

有内置的方法吗?如:

<%= @person.name.count =>

这可能吗?

谢谢,

丹尼

【问题讨论】:

    标签: ruby-on-rails count lookup relationship


    【解决方案1】:

    不要接受我的回答,因为我不想偷 Yannis 的分数,但是他的方法可以改写成这样:

    def name_and_gifts_count
      return "#{name} (#{gifts.count})"
    end
    

    实际上,我也会省略return。最后一条语句在 Ruby 中自动返回。

    def name_and_gifts_count
      "#{name} (#{gifts.count})"
    end
    

    【讨论】:

      【解决方案2】:

      如果您的 Person 模型有 has_many :gifts,在您的模型中还要添加:

      de name_and_gifts_count
        name_and_gifts_count = name
        name_and_gifts_count += '('
        name_and_gifts_count += gifts.count.to_s
        name_and_gifts_count += ')'
        return name_and_gifts_count
      end
      

      然后在您的链接中,使用:

      <%= link_to h(person.name_and_gifts_count), person %>
      

      【讨论】:

      • 你可以让它更短。这看起来很丑 IMO...return "#{name} (#{gifts.count})"
      • @captaintokyo - 再次在人物模型中,还是在视图中?
      • 在模型中:只需将上述方法中的所有内容替换为:return "#{name} (#{gifts.count})"。功能完全相同。我只是觉得这看起来好多了。
      • 您缺少双引号...我将其添加为答案,因此更清楚。
      • 我在构建字符串时经常使用这种方式,以便轻松添加一些逻辑。例如,您可以执行name_and_gifts_count += gifts.count &gt; 0 ? gifts.count.to_s : 'no picture' 之类的操作,甚至可以将“无图片”字符串替换为指向允许上传图片的表单的链接……
      猜你喜欢
      • 2014-08-03
      • 2023-03-24
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多