2015-01-05 15 views
1

我在rails中使用postgresql匹配不完整和完整的記錄。這裏的匹配代碼:如何使用rails和postgresql將匹配記錄保存爲新記錄並更新user_id

QualifyingEvent.where("(class_date = :class_date AND course_id = :course_id) 
        OR (class_date = :class_date AND sponsor_name = :sponsor_name) 
        OR (course_id = :course_id AND sponsor_name = :sponsor_name)", 
         class_date: '2001-01-01', 
         course_id: 'A111', 
         sponsor_name: 'ICPAS').first 

我要保存的匹配記錄的副本與CURRENT_USER的USER_ID。我目前正在使用一個複雜的解決方法,在其中設置一個變量,即abc = match,然後解析匹配,即user_id = abc.user_id,以便我可以用參數創建一個新的QualifyingEvent,例如, :class_date,:course_id,:sponsor_name和:user_id

我試過abc = QualifyingEvent.new,然後abc = match和abc.save。它沒有工作。

必須有一個更簡單的方法?!預先感謝您的幫助。

回答

0

我試過abc = QualifyingEvent.new,然後abc = match和abc.save。 它沒有工作。

這將使一個對象等於另一個對象,而你真正想要做的只是分配一個對象的屬性到另一個對象

abc = QualifyingEvent.new 
abc.assign_attributes(match.attributes) 

然後理清CURRENT_USER ID的任何值你需要加上將created_at,updated_a和id的日期/時間戳設置爲nil,因爲Rails和RDBMS將在保存記錄時處理這些值。

也讓周圍的質量分配的保護可以使用:without_protection => true參數

abc.assign_attributes(match.attributes, :without_protection => true) 

看到文檔的更多信息http://apidock.com/rails/ActiveRecord/Base/assign_attributes

+0

我閱讀文檔,並試圖以下內容: – user3763682

+0

我讀取的文檔和試過如下: ABC = QualifyingEvent.new abc.assign_attributes( - 代碼如上-.attributes) 哪個工作。 id爲0,'nil'通過匹配具有不同id的兩條記錄返回。如果我然後嘗試重新分配的ID和保存記錄, abc.update(:id =>'nextval(qualifying_event_id_seq)') 我得到一個'重複鍵值違反唯一約束abc_pkey','細節:Key(id)=(0)已經存在。'那麼,如何將具有指定屬性的記錄保存爲具有正確順序的ID的新記錄。在我的情況下,它應該是51號?謝謝。 – user3763682

+0

@ user3763682 created_at,updated_at和id應該在保存之前都設置爲零 – jamesc