2017-08-18 47 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

相關問題