我有一个用户模型,其中包含了很多资产组合,其中包含了__资产管理资产的资产。
基本上,用户1可能在其投资组合中使用Google,而用户2也可能在其投资组合中使用Google。为什么当我可以拥有多对多(HABTM)关系时,为什么使用重复的Google股票价格历史记录来填充数据库。然而,抛出我的是当AssetHistory模型中的asset_id为多个值时,该怎么办。即它需要引用用户1和用户2.用户1的Google可能是asset.id 1而用户2的Google可能是asset.id 2.因此,AssetHistory模型中的条目如何引用这两个ID?
似乎很清楚,asset_id不能同时为2个值,但我无法解决这个问题。我应该使用foreign_key
并将Google作为关键吗?如果是这样,我的资产模型中仍然存在问题,即为Asset_History_id输入什么条目,因为资产Google可能有30行股票价格历史记录。每个股票价格历史记录都是不同的Asset_History_id。
有人可以帮助解释我做错了吗?
请注意,我在资产模型中使用after_save来填充资产价格历史记录。即当有人添加资产时,它会填充asset_history,但它不会填充Asset模型中的asset_history_id字段,也不会填充AssetHistory模型中的asset_id,因为我在那里做了什么。 / p>
我的资产模型有:
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
答案 0 :(得分:1)
我的建议是:
class User < ActiveRecord::Base
has_many :assets, :through => :porfolios
has_many :porfolios
end
class Porfolio < ActiveRecord::Base
has_many :assets
has_many :users
end
class Asset < ActiveRecord::Base
has_many :users, :through => :portfolios
has_many :portfolios
has_and_belongs_to_many :asset_histories
end
顺便说一句,你真的需要Asset
和AssetHistory
之间的多对多关系吗?我想象AssetHistory
的每个实例只能引用一个Asset
,可能是belongs_to :asset
/ has_one :asset_history
。