通常对续集和SQL不熟悉,请耐心等待。我正在使用Sequel的many_through_many
插件,并且我检索resources
,它们与特定的tasks
到groups
间接关联,通过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
,但由于它们都是不同的对象,每个资源都会有很多不同的时间表。什么是操纵这些资源对象客户端最直接的方式,但维护从服务器查询的任务关联?
操纵他们聘请?通过某种方式使这些操作对持有相同关联行的所有对象可见? –
@DaveNewton是的,确切地说。如果我在Ruby中通过查询数据库中的行来创建新对象,那么如果它们在Ruby-land中是同一个对象,那就太好了。然后再一次,我会在数据库中做很多重复的命中,所以这可能不是正确的方法吗? – Davigor
为什么他们需要成为同一个对象?共享状态通常只会导致问题。你最关心的是什么? –