2009-07-30 9 views
6

皆さん。RailsのActiverecordテーブルはどのように参照できますか?

SystemInfo < ActiveRecord::Base 
    belongs_to :SystemInfo 

end 

アイデアは、システムAは、その子としてシステムBを含むことができ、次のとおりです。私は、以下の例のような奇妙な何かを実装するためのActiveRecordを使用するためのアイデアを持っています。だから私は、アプリケーションのスケルトンを生成します。

script/generate scaffold SystemInfo parent_id:integer name:string 

、その後、私はシステムAを挿入したとき、私は(システムAのPARENT_IDが「ゼロ」に等しくなり、システムBのPARENT_IDとしてシステムAのIDを使用し、私が使用している場合。このようなコマンド:

sysA = SystemInfo.find_by_id(1) # Get System A 

私は、これはシステムAを得ることが可能であると思うし、それは子供の、システムBは同様に:?私はこのアイデアを実装するため

sysA.childrens # Get System B and other SystemInfo which has parent_id == 1 (System A's ID) 

あなたは私がガイドラインを示唆してもらえティこれは非常に一般的な考えであり、私たちはそれを行うことが可能でなければなりません。 ;)

答えて

15

あなたは正しいアイデアがあります。

class SystemInfo < ActiveRecord::Base 
    belongs_to :parent, :class_name => 'SystemInfo' 
    has_many :children, :class_name => 'SystemInfo', :foreign_key => 'parent_id' 
end 

s = SystemInfo.find(1) 
s.children 
# => [...] 
s.parent 
# => <SystemInfo> 
+0

ありがとう、エリック。私はあなたの解決策を試しましたが、コンソールで再テストすると、以下のように表示されます: reload! リロード... =>真 >> SysInfo.find(:すべて) SysInfo.find(:すべて) と、ArgumentError:不明なキー(S):クラス 私はRailsの2.3.3を使用します。なぜ私があなたのようにできないのか私に説明できますか? – Teerasej

+0

私は改善すべき点を見つけました。私は ':class'の代わりに ':class_name'を使う必要があります(新しいRailsバージョンのものかもしれません)。 ありがとう、エリック!私はあなたの答えを選ぶ! ;) – Teerasej

+0

ありがとう、Teerasej。私は正しい答えを更新しました。 – erik

2

acts_as_treeを参照してください。私はプロジェクトの方法にそれを使用したので、それ以来どのくらい変化しているのか分かりませんが、あなたが探しているものはそうだと思います。

関連する問題