複数のオブジェクトの複合体である2つのモデルがあります。基本的には、保存と更新のために手動で管理しています。ただし、アイテムを選択すると、そのアイテムの関連プロパティにアクセスすることはできません。たとえば、次のようにモデルオブジェクトのどのレベルで、ActiveRecordは関連オブジェクトをロードしません
class ObjectConnection < ActiveRecord::Base
def self.get_three_by_location_id location_id
l=ObjectConnection.find_all_by_location_id(location_id).first(3)
r=[]
l.each_with_index do |value, key|
value[:engine_item]=Item.find(value.engine_id)
value[:chassis_item]=Item.find(value.chassis_id)
r << value
end
return r
end
end
と各項目:
class Item < ActiveRecord::Base
has_many :assets, :as => :assetable, :dependent => :destroy
私はObjectLocation.find_three_by_location_idを使用する場合は、他のほとんどの状況でItem.find(ID)を使用する場合のに対し、私は資産へのアクセスを持っていません、 私がやります。
私はインクルードを使ってみましたが、それはそう思わなかったのです。
THX
エンジンとシャーシの両方が「アイテム」で、「belongs_to:item、:foreign_key => 'engine_id」、belongs_to:item、:foreign_key =>「chassis_id」は使用できません。それは関係が「has_one」であるように見えますが、正直なところ、これをモデル化する方法は私を少し超えています。エンジンとシャーシは多形ではありません。現在、is_engine、is_chassisのステータスフィールドがあります。この部分は間違いなくちょっと醜いですが、モデリングの仕方はアプリの他の部分でもうまく機能します。 – timpone
'Item'をスーパークラスにして、' Item'のサブクラスである 'Engine'と' Chassis'モデルを別々に作るのが一番良いと思います。 'Item'クラスのために'多態性 '関係を指定します(これは他のクラスに細分されます)。 [ここではActiveRecordの多型関係についてもっと読む](http://guides.rubyonrails.org/association_basics.html#polymorphic-associations)をrailsのdocサイトで読んでください。あなたが本当にあなたの現在の設定(私はお勧めしません)に固執したい場合は、私の変更された答えの下部を読んでください。 – Batkins
あなたが言及しているコードの一部が正常に動作し、正しいデータが表示されます。 – timpone