我有一個數據結構,其中的主題有子主題,它們也有子主題,從原始主題繼續向下關於六個級別。每個主題都有多個子主題。 我正在尋找一種方法來遍歷這些數據,並從每個子主題中提取附屬的數據......就像拉取我想要的「下游」數據一樣。遍歷Rails應用程序中的複雜數據結構
For example Given a topic structure:
Harry_Potter > Characters > Slitherin_House.videos
(假設slitherin房子對於每個成員,馬爾福,克拉布等的副標題)我要爲每位成員的視頻出現在Slitherin_House,字符和Harry_Potter視頻列表(每個祖先)。
我一直環顧四周,整個Ancestry和Acts As Tree跌跌撞撞地通過代碼閱讀並試着在使用它們,但他們似乎周圍事物的祖先方面更加註重,而不是訪問,並從拉數據兒童。
我也試過我的手在使用協會
has_many :through, and has_and_belongs_to_many
但在我試圖創建一個工作遍歷系統已經失敗。似乎無法完成包裝我的頭如何做到這一點。
有沒有人有什麼想法或建議做什麼給予這樣的困境?或者知道提供任何此類功能的寶石?
關係類&模式:(因爲它應該流像小溪)
class CreateStreams < ActiveRecord::Migration
def change
create_table :streams do |t|
t.integer :downstream_id
t.integer :upstream_id
t.timestamps
end
add_index :streams, :downstream_id
add_index :streams, :upstream_id
add_index :streams, [:downstream_id, :upstream_id], unique: true
end
end
# == Schema Information
#
# Table name: streams
#
# id :integer not null, primary key
# downstream_id :integer
# upstream_id :integer
# created_at :datetime not null
# updated_at :datetime not null
#
class Stream < ActiveRecord::Base
attr_accessible :downstream_id
belongs_to :subsidiary, class_name: "Topic"
belongs_to :tributary, class_name: "Topic"
validates :downstream_id, presence: true
validates :upstream_id, presence: true
end
主題模型的
# == Schema Information
#
# Table name: topics
#
# id :integer not null, primary key
# name :string(255)
# created_at :datetime not null
# updated_at :datetime not null
# slug :string(255)
# wiki :string(255)
# summary :string(255)
class Topic < ActiveRecord::Base
extend FriendlyId
attr_accessible :name, :wiki, :summary
has_many :streams, foreign_key: "downstream_id", dependent: :destroy
has_many :tributaries, through: :streams, source: :tributary
has_many :reverse_streams, foreign_key: "upstream_id",
class_name: "Stream",
dependent: :destroy
has_many :subsidiaries, :through => :reverse_streams, source: :subsidiary
friendly_id :name, use: :slugged
validates :name, presence: true, length: { maximum: 50 },
uniqueness: { case_sensitive: false }
def downstream?(other_topic)
streams.find_by_downstream_id(other_topic.id)
end
def flow!(other_topic)
streams.create!(downstream_id: other_topic.id)
end
def dam!(other_topic)
streams.find_by_downstream_id(other_topic.id).destroy
end
end
注:我也希望能夠指定一個副主題,多的父母。例如,角色可能會置於「演員」之下。
你可以顯示你的模型和表格的來源? – 2012-04-08 17:57:18
添加主題模型和流(關係)模型/表 我可以添加主題表以及它雖然分散在多個遷移,所以我添加了註釋版本 – 2012-04-08 19:29:33