簡體   English   中英

在Ruby on Rails中使用由外部API支持的模型的ActiveRecord接口

[英]Using ActiveRecord interface for Models backed by external API in Ruby on Rails

我正在嘗試在我的Rails應用程序中使用模型從外部API檢索信息。 我想要做的是以類似於ActiveRecord模型提供的方式訪問我的數據模型(可能包含多個API調用產生的信息)(特別是關聯,以及相同類型的可鏈式查詢方法)。

我最初的本能是重新創建我想要的ActiveRecord部分並合並這個API。 不想“重新發明輪子”並確切地看到增加更多功能需要多少工作讓我退后一步並重新評估如何處理這個問題。

我已經找到了在沒有表的情況下使用ActiveRecord的方法(參見:Railscast#193 Tableless Model和這里的博客文章)並查看了ActiveRecord。 因為ActiveModel似乎只包含Validations,所以我不確定在這種情況下它是非常有用的。 在沒有表格的情況下使用ActiveRecord的解決方法似乎是最好的選擇,但我懷疑有一種更清潔的方式,我只是沒有看到。

是一個要點,其中包含我嘗試重新創建ActiveRecord功能時編寫的一些代碼,這些代碼是從ActiveRecord源本身大量借用的。

我的問題歸結為:我可以通過實現上面指定的ActiveRecord的變通方法或者自己重新創建功能來獲得我想要的功能(鏈接查詢方法,關系),但這些是非常理想的解決方案嗎?

請記住,Rails仍然只是Ruby。

您可以將外部API表示為應用程序中的實例化類。

class Event
  def self.find(id)
    #...External http call to get some JSON...#
    new(json_from_api)
  end

  def initialize(json)
    #...set up your object here...#
  end


  def attendees
    #...external http call to get some JSON and then assemble it 
    #...into an array of other objects
  end
end

因此,您最終編寫本地抽象來從api調用創建ruby對象,您可以將ActiveModel或Virtus混合到其中,這樣您就可以使用屬性的哈希分配和表單的驗證等。

看一下我為管子的TfL飼料做的API抽象。 service_disruption

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM