【问题标题】:Do I treat this as an array or a hash?我将其视为数组还是哈希?
【发布时间】:2015-07-24 00:12:20
【问题描述】:

我有两个模型:class User < ActiveRecord::Baseclass Tips < ActiveRecord::Base。如果我写:

user.each do |...|

tips.each.do |...|

我应该将其视为数组还是哈希?我怎么会知道?

我会为用户和提示发布模型,但它们很长。任何帮助表示赞赏!提前谢谢!!!

【问题讨论】:

  • 我想你的意思是users.each而不是user.each

标签: arrays ruby ruby-on-rails-3 hash model


【解决方案1】:

ActiveRecord::Base 继承的对象是 ActiveRecord 对象,应该这样对待。可以在here 找到完整的方法列表。您可以选择将 AR 对象转换为数组(使用 .to_a 内置)或哈希(通过使用您自己的哈希实现,具体取决于您想要的键和值)

【讨论】:

  • 我的user 模型has-many tips。然后我可以说user.tips.to_a 来创建一系列提示吗?
  • 是的,但您需要指定特定用户才能获得他们的所有提示。即:@user.tips.to_a
【解决方案2】:

我认为您的问题可以通过多种方式改进。如果我理解正确:

你有一堂课

class User < ActiveRecord::Base
  has_many :tips
  ...
end

class Tip < ActiveRecord::Base
  belongs_to :user
  ...
end

因此,如果您有一个类 Tip 的实例(该类应该是单数的,除非该类的每个实例都代表许多 Tips)- 让我们将此实例称为 @tip - 它只属于一个用户。所以@tip.user 将是一个真正的用户——没有什么可以迭代的(不像哈希或数组)。但是用户本身有很多提示。所以@user.tips 就像一个数组。虽然@user.tips 不是一个数组(只需在rails 控制台中尝试类似:

@user = User.first
@user.tips.class

),它在大多数情况下表现得像一个数组。如果你在这里需要一个真正的数组,你可以使用

@user.tips.to_a

但在大多数情况下,您应该坚持关联本身。

【讨论】:

    【解决方案3】:

    对于您似乎正在尝试做的事情,将其视为一个数组。其实你可以User.all.to_a,它会是一个数组。

    【讨论】:

      【解决方案4】:

      编程语言的“数组”vs.“哈希”的确切含义各不相同,但 Ruby (不像 PHP,比如说 ...) 遵循 Perl:

      • “哈希”是事物的集合,由任意“键”索引。
      • “数组”是事物的有序集合,由整数索引。

      因此,“在这个案例中,对于来说,什么最意义?如果“这个集合自然是‘有序的’,因此“最舒服”的思考方式是“#1,#2,#3 ...”,那么 Ruby array 将被调用然而,如果人们通常会(相反)想到“'Tom'、'Dick' 或 'Harry' 的条目”,那么最好的表示将是 hash

      从表面上看,因为我看不到明显的“关键”,所以最好的答案可能是:array

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-29
        • 2019-10-27
        • 2017-05-11
        • 2019-05-23
        • 2016-10-04
        • 1970-01-01
        • 1970-01-01
        • 2011-02-15
        相关资源
        最近更新 更多