【问题标题】:How do I retrieve specific attributes of a relationship/collection?如何检索关系/集合的特定属性?
【发布时间】:2009-07-05 23:15:42
【问题描述】:

有没有一种从关系/集合中检索所有特定属性的好方法?例如,我想要一个人的所有汽车名称的列表。显然我不能做到以下几点:

Person.Cars.Name(s)

...但是在 ruby​​ 中是否存在这种性质的东西(或者是否有 ActiveRecord 辅助方法)来处理它?显然我可以遍历所有的汽车并附加到一个数组中,但我想要一些更干净的东西。有什么想法吗?

最好的。

【问题讨论】:

    标签: ruby-on-rails ruby attributes collections relationship


    【解决方案1】:

    如果carsperson 的关联,而namecar 的属性,那么您可以执行以下操作:

    # person = Person.find(conditions)
    person.cars.collect { |car| car.name }
    

    甚至(感谢ActiveSupport 和/或Ruby 1.9):

    person.cars.collect(&:name)
    

    更新:这记录在以下地方:

    更新 2: 应用格式的示例:

    person.cars.collect { |car| "(#{car.name})" }
    

    【讨论】:

    • 太棒了!谢谢你。究竟记录在哪里?我必须承认,我在 Ruby/Rails 中使用过相当长的一段时间,因为我可以通过直觉找到某些功能。即使使用在线文档,我也无法真正找到这种性质的一些更酷的项目。
    • &:name 语法也内置于 Ruby 1.9 中,因此如果您的目标是较新的 Ruby 版本,您可以在 Rails 应用程序之外使用它。
    • 在 Rails 文档中看不到这一点的原因是 Enumerable#collect(或其同义词 #map)只是普通旧 Ruby 的一部分。
    • 有什么方法可以操作返回的数据吗?例如,我想在每个返回的单词周围放置括号以进行格式化。我该怎么做呢?
    • 好的,基本上我正在构建一个数据库查询。所以我需要它以加入引号字符串的形式。我有: points.collect(&:name).join(",") 有什么方法可以使用吗?顺便说一句,感谢最后几篇文章。
    【解决方案2】:

    在较新的 rails 版本 (> 3.2.1) 中,您可以使用方法 pluck,whitch 是来自 ActiveRecord 的方法,因此它确实比任何顺序数组方法 (map, collect 等)。

    我这种情况,你可以这样使用: Person.pluck(:name)

    但是作为ActiveRecord方法,只能在ActiveRecord::Relation中使用,不能在数组中使用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-25
      • 2018-12-25
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      相关资源
      最近更新 更多