检索记录并将其作为Ruby对象进行操作

时间:2017-08-18 18:08:02

标签: sql ruby sequel

一般来说是续集和SQL的新手,所以请耐心等待。我正在使用Sequel的many_through_many插件,并通过resources检索与tasksgroups间接关联的groups_tasks连接表和groups_resources连接表。然后,当我在task.resource数据集上查询Task时,我在Ruby中获取资源对象,如下所示:

>>[#<Resource @values={:id=>2, :group_id=>nil, :display_name=>"some_name"}>, #<Resource @values={:id=>3, :group_id=>nil, :display_name=>"some_other_name"}>]

现在,我希望能够为这些资源对象添加一个新的实例变量schedule,并在Ruby中对其进行处理。但是,每次我为每个任务查询task.resources时,Sequel都会将资源对象作为不同的资源对象每次都带入ruby(这是有意义的),尽管数据库中的记录相同:

>>
"T3"
#<Resource:0x007fd4ca0c6fd8>
#<Resource:0x007fd4ca0c6920>
#<Resource:0x007fd4ca0c60d8>
#<Resource:0x007fd4ca0c57a0>


"T1"
#<Resource:0x007fd4ca0a4c08>
#<Resource:0x007fd4ca097f58>
#<Resource:0x007fd4ca097b48>


"T2"
#<Resource:0x007fd4ca085ba0>
#<Resource:0x007fd4ca0850d8>

我原本想在class Resource中设置一个setter并执行resource.schedule = Schedule.new,但由于它们是所有不同的对象,因此每个资源都会有大量不同的时间表。操作这些资源对象客户端的最直接的方法是什么,但维护我从服务器查询的任务关联?

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您需要检索Resource个对象,然后操作名为schedule的某个属性。我对Sequel不太熟悉,但查看文档似乎与ActiveRecord类似。

  1. 设置实例变量(我想在Resource类上使用attr_accessor :schedule之类的东西)。

  2. 将记录存储在变量中,每次都使用相同的实例,而不是Sequel返回的新实例。