0

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
4

1 に答える 1

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を使用して、1 つのみを参照すると想像します。Assetbelongs_to :assethas_one :asset_history

于 2013-03-23T04:32:20.920 に答える