2013-05-10 45 views
0

我有驗證模型,一些方法,過濾器等等。不幸的是,數據來自API,所以我需要重載從數據庫中提取記錄的方法。那是哪種方法?Rails中的遠程數據模型

到目前爲止我有創作。活動記錄模型中的方法創建是新記錄。我只是將方法create添加到我的模型中,並且它正在通過API創建記錄。現在我想要選擇數據。

下面的代碼示例我已經有(創造的記錄):

def create 
    EmployeesApi.create(self.attributes.reject{|k,v| %w(id created_at updated_at).include? k }) 
end 

我需要它作爲低級別的,因爲它有一些關係,應用特定的驗證。移動關係和周圍的邏輯意味着整合兩個現有系統,在這種情況下這並不好。

另一種解釋:

我想跳過模型的數據的數據庫,但對於聯想讓一切都恢復。該模型的數據存儲在另一個應用程序/數據庫/系統中。

我將通過API負荷模型自己的數據和ActiveRecord的將配對/加載它是協會從本地數據庫

+0

嗯,我想你不是在尋找'find()'方法,對吧? – Raindal 2013-05-10 16:07:27

+0

斯巴達:如果它能夠運作,它會很棒,但不幸的是我需要更深入,因爲也有可能涉及到的。在CanCan授權後,*其中*會過濾記錄 – Mailo 2013-05-10 16:13:01

回答

2

如果EmployeeApi會在ActiveResource之後建模,你可以用ActiveModel來增強它。關聯只能以一種方式工作(從ActiveRecord到ActiveResource)。考慮API等異常情況也是很好的。

+0

看起來很有前途,迪克。明天再試吧 – Mailo 2013-05-12 14:45:11

0

我想你想實現的是創造這個紀錄之前,拉從DB一些數據?或驗證一些DB領域,也許確保一個獨特的約束或東西..請看活動記錄鉤/回調

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

你可以做這樣的事情:

class Subscription < ActiveRecord::Base 
    before_create :record_signup 

    private 
    def record_signup 
     self.signed_up_on = Date.today 
    end 
end 
+0

不,我想繞過模型數據的數據庫,但爲了關聯,讓所有事情都像原來一樣。該模型的數據存儲在我看到的另一個應用程序/數據庫/系統 – Mailo 2013-05-10 16:19:06

+0

中,所以您的數據創建者會是某種代理模式。有道理..(http://en.wikipedia.org/wiki/Proxy_pattern)。至於積極的記錄,你正在關閉關閉持久性(http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-persisted-3F)...更具體的持續?方法。祝你好運 – DevDude 2013-05-10 16:28:16

+0

我不關閉持久性。我已經堅持不懈。現在我需要加載。但你是對的代理patern – Mailo 2013-05-10 16:41:19