dbではなくサードパーティのAPIに接続しているため、ActiveModelを使用しています。ハッシュを渡してモデルの属性に変換できるように、独自のイニシャライザーを作成しました。これは、アプリケーションの一部のフォームをサポートするためです。
attr_accessor :Id, :FirstName, :LastName,...
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
問題は、APIからのデータ取得を処理するために同じモデルを使用したいということですが、これには私が本当に気にしない他のデータがたくさんあります。そのため、APIから返されたハッシュを反復処理し、属性がモデルに存在するかどうかを確認し、存在しない場合は無視します。これにより、フォームの投稿とAPIから返されるデータの両方に対して一貫したモデルを作成できるようになります。何かのようなもの:
def initialize(attributes = {})
attributes.each do |name, value|
if self.has_attribute?(name)
send("#{name}=", value)
end
end
end
ActiveModel APIのドキュメントを調べましたが、同等のものはないようです。これは、私がこれを別の方法で行うべきであるかのように私を感じさせています。
これはこれを行うための正しい(レール)方法ですか?データがさまざまなソースから取得されている場合、一貫したモデル属性を確保するにはどうすればよいですか?