ruby-on-rails - 在简单的 ruby​​ 中从 Person 实例获取孙子

标签 ruby-on-rails ruby

我已经在 Rails 中实现了继承,并从 Person 类中获取子代和孙代。

但现在我想使用简单的 ruby​​ 类从 Person 类获取子类和孙子类,而不使用 ActiveRecord。

我已经成功地从一个人对象中获取了 child 。请指导我如何从 Person 实例中获取孙子。

class Person
  attr_accessor :name, :age
  attr_reader :ref

 def initialize(name, ref)
   @name = name
   @ref = ref
 end
end

class Parent < Person
  attr_reader :children

  def initialize(names = %w(A B C))
   @children = names.map do |n|
     Person.new(n, self)
    end
  end
end


bar = Parent.new.children.first
bar.ref

最佳答案

如果 parent 、 child 和孙子之间没有行为差异,那么可以用一个类来建模:

class Person

  attr_reader :children
  attr_reader :name

  def initialize(name, children: [])
    @name = name
    @children = children
  end

  def grandchildren
    @children.flat_map(&:children)
  end

end

我们添加了一个 #grandchildren 方法,用于询问每个 child 的 child 情况。这个例子展示了它是如何工作的:

sally = Person.new("Sally")
fred = Person.new("Fred", children: [sally])
mary = Person.new("mary", children: [fred])
p mary.children.map(&:name)         # => ["Fred"]
p mary.grandchildren.map(&:name)    # => ["Sally"]

关于ruby-on-rails - 在简单的 ruby​​ 中从 Person 实例获取孙子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38901646/

相关文章:

ruby-on-rails - 查找登录用户的最后活跃时间

ruby - 使用 Ruby 抓取图像数据库

ruby-on-rails - 需要从 database.yml 文件中获取用户名和密码,并传递给 rake 任务中的方法

ruby-on-rails - Ruby on Rails : alias_method_chain, 究竟是做什么的?

ruby-on-rails - 如何处理基于 JSON 的 RESTful 代码中的异常?

ruby-on-rails - 在 Rails 的 application_helper.rb 代码中测试 flash 消息方法

ruby-on-rails - 缺少新 Rails 3 应用程序的模板?

ruby-on-rails - 如何将 youtube 视频动态嵌入到 rails 应用程序中

javascript - 在 .js.erb 文件中的 Ajax 调用中创建 RoR 链接

ruby - 按类型从数组中删除元素