2017-08-18 33 views
0

通常对续集和SQL不熟悉,请耐心等待。我正在使用Sequel的many_through_many插件,并且我检索resources,它们与特定的tasksgroups间接关联,通过groups_tasks连接表和groups_resources连接表。后来,当我在一个Task集查询task.resource我得到了红宝石资源对象,像这样:检索记录并将它们作为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每个任务,续集带来的资源对象,以红宝石为不同资源的每个时间(这是有道理的)对象,尽管是在数据库中相同的记录:

>> 
"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,但由于它们都是不同的对象,每个资源都会有很多不同的时间表。什么是操纵这些资源对象客户端最直接的方式,但维护从服务器查询的任务关联?

+0

操纵他们聘请?通过某种方式使这些操作对持有相同关联行的所有对象可见? –

+0

@DaveNewton是的,确切地说。如果我在Ruby中通过查询数据库中的行来创建新对象,那么如果它们在Ruby-land中是同一个对象,那就太好了。然后再一次,我会在数据库中做很多重复的命中,所以这可能不是正确的方法吗? – Davigor

+0

为什么他们需要成为同一个对象?共享状态通常只会导致问题。你最关心的是什么? –

回答

0

如果我正确理解你的问题,你想检索Resource对象,然后操纵一些名为schedule的属性。我对Sequel并不是很熟悉,但仔细查看文档,它似乎与ActiveRecord类似。

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

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

+0

这只是我需要的一种方法,谢谢! – Davigor

相关问题