【问题标题】:Is it possible to make an array of objects in Ruby on Rails ?是否可以在 Ruby on Rails 中创建对象数组?
【发布时间】:2016-08-31 13:46:57
【问题描述】:

我想在 Ruby on Rails 中创建一个临时对象数组,这样我就可以保存一些数据,然后打印它。我知道,这听起来很奇怪,但在我想要做的更宏大的计划中,这将是有意义的!

到目前为止,这是我的代码:

  <% peopleArray = Array.new %>
  <% familyArray = Array.new %>
  <% friendsArray = Array.new %>


  <% @subject.list_people.each do |people| %>
    <% people.people_family.each do |family| %>
      <% family.find_friends.each do |friends| %>
        <% peopleArray << people %>
        <% familyArray << family %>
        <% friendsArray << friends %>
      <% end %>
    <% end %>
 <% end %> 

我不想将这些整个对象放入单独的数组中,而是想从这三个对象中的每一个中选择一个字段,从中创建一个新对象,然后将其插入到数组中。所以数组中的每个对象都会有 3 个属性,然后我就可以按一个排序了。

这可能吗,据我所知,Ruby 中的所有数组都只是对象数组?

我一直在玩这个,尝试学习 ROR,尝试将数据按摩成我想要的格式,但没有得到任何结果。

peoplefamilyfriends 每个对象都有一个我要保存的属性。

假设每个对象都有一个字段“名称”,我想将它添加到一个新对象中。我怎样才能做到这一点?这是使用伪代码的尝试来展示我希望实现的目标。有可能吗?

  myArray = Array.new //create array 

  <% @subject.list_people.each do |people| %>
    <% people.people_family.each do |family| %>
      <% family.find_friends.each do |friends| %>

       myObj = new Object //create object

        <% myObj.name1 = people['name'].first %>
        <% myObj.name2 = family['name'].first %>
        <% myObj.name3 = friends['name'].first %>
        <% myArray << myObj %>
      <% end %>
    <% end %>
 <% end %> 
    <% myArray.sort(name1) %> //Sort the list based on field name1.

抱歉,如果这很明显,我做了很多研究,但未能取得很大进展,所以我希望这篇文章可以在这里发布。

【问题讨论】:

  • 当然,但是……你需要一个实际的类,或者一个 OpenStruct,甚至是一个哈希。你不能神奇地让 Object 基类知道你想要什么。

标签: ruby-on-rails arrays ruby sorting object


【解决方案1】:

对于您的“对象”,您可能希望使用HashStruct。但是,请使用Hash

 myArray = []

  <% @subject.list_people.each do |people| %>
    <% people.people_family.each do |family| %>
      <% family.find_friends.each do |friends| %>

       myObj = {}

        <% myObj['name1'] = people['name'].first %>
        <% myObj['name2'] = family['name'].first %>
        <% myObj['name3'] = friends['name'].first %>

        <% myArray << myObj %>
      <% end %>
    <% end %>
  <% end %> 
  <% myArray.sort_by! { |obj| obj['name1'] } %> //Sort the list based on field name1.

【讨论】:

  • 非常感谢,这真的很有帮助,教会了我很多关于如何构造这些对象的知识:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多