has_many Portfolios、has_many Assets、has_and_belongs_to_many AssetHistories の User モデルがあります。
基本的に、ユーザー 1 のポートフォリオに Google が含まれていて、ユーザー 2 のポートフォリオにも Google が含まれている可能性があります。多対多 (HABTM) の関係を持つことができるのに、Google の株価履歴の重複した行をデータベースに入力する必要はありません。ただし、AssetHistory モデルの asset_id が複数の値になる場合に、asset_id に何を指定するかが問題です。つまり、ユーザー 1 とユーザー 2 の両方を参照する必要があります。ユーザー 1 の Google は asset.id 1 であり、ユーザー 2 の Google は asset.id 2 である可能性があります。したがって、AssetHistory モデルのエントリは両方の ID をどのように参照するのでしょうか?
asset_id を同時に 2 つの値にすることはできないことは明らかですが、これについて頭を悩ませることはできません。を使用しforeign_key
て Google をキーにする必要がありますか? もしそうなら、アセット Google にはおそらく 30 行の株価履歴があるため、Asset_History_id にどのエントリを配置するかについて、アセット モデルにまだ問題があります。各株価履歴は、異なる Asset_History_id になります。
誰かが私が間違っていることを説明するのを助けることができますか?
資産モデルで after_save を使用して、資産価格の履歴を入力していることに注意してください。つまり、誰かがアセットを追加すると、asset_history が入力されますが、Asset モデルの asset_history_id フィールドは入力されず、AssetHistory モデルの asset_id は入力されません。
私の資産モデルには次のものがあります。
class Asset < ActiveRecord::Base
attr_accessible :asset_symbol, :shares, :cost, :date_purchased, :asset_history_id
belongs_to :portfolio
has_and_belongs_to_many :asset_histories
after_save populatepricehistory
private
def populatepricehistory
#uses an api to download price data as an array and imports it to AssetHistory...
#I expect something should go here to fill out the asset_history_id field in the Asset Model
#while simultaneously filling out the asset_id in the AssetHistory model
end
end
資産履歴モデル
class AssetHistory < ActiveRecord::Base
attr_accessible :close, :date, :asset_id, :asset_symbol
has_and_belongs_to_many :assets
end
AssetHistoryAsset 結合テーブルの移行
class AssetHistoryAssetJoinTable < ActiveRecord::Migration
def up
create_table :asset_histories_assets, :id=> false do |t|
t.integer :asset_id
t.integer :asset_history_id
end
end
def down
drop_table :asset_histories_assets
end
end