更新(具体和更详细的先前版本如下):
我正在开发一个电视台网站。以下是我的程序部分的要求:
- 每个
Program
都有一个Category
。 - 每个
Program
都有一个Subcategory
。 - 每个
Category
都有很多Subcategories
- 每个
Category
都有很多Programs
。 - 每个
Subcategory
都有一个Category
- 每个
Subcategory
都有很多Program
。
我想检索所有这三个要关联的模型。例如,我应该能够从我的视图中检索以下数据:
尽管:
p = Program.find(1)
p_cat = ProgramCategory.find(1)
p_subcat = ProgramSubcategory.find(1)
我应该能够检索并编辑这些:
p.program_category
p.program_subcategory
或者
program_category.programs
program_subcategory.programs
您可以在下面看到我为实现这些要求所做的尝试。您可能会向我推荐一种完全不同的方式或纠正我的错误。
谢谢
==================================================== ==========
我有 3 个模型。它们应该嵌套在彼此中。
程序类别 > 程序子类别 > 程序
这是我的代码:
程序类别模型:
has_many :programs
has_many :program_subcategories
程序子类别模型:
belongs_to :program_category
has_many :programs
程序模型:
belongs_to :program_category
belongs_to :program_subcategory
当我创建一个新程序时,我可以设置它的类别,一切都很好。我可以从两侧访问它们。例如,
program.program_category
给了我我所期望的。并且
program_category.programs
也给了我想要的东西。
但是,-问题来了-
当我尝试访问program.program_subcategory
时,我只收到零。
即使设置了我的子类别的类别,也设置了我的程序类别,为什么我不能program.program_subcategory
直接访问?
当我输入 时program_category.program_subcategories
,我会收到该类别拥有的所有子类别。但我不能直接从Program
对象中获取子类别。
我的方案如下。任何帮助都会得到帮助。
ActiveRecord::Schema.define(:version => 20120926181819) do
create_table "program_categories", :force => true do |t|
t.string "title"
t.text "content"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "program_subcategories", :force => true do |t|
t.integer "program_category_id"
t.string "title"
t.text "content"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "program_subcategories", ["program_category_id"], :name => "index_program_subcategories_on_program_category_id"
create_table "programs", :force => true do |t|
t.integer "program_category_id"
t.integer "program_subcategory_id"
t.string "title"
t.text "content"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "programs", ["program_category_id", "program_subcategory_id"], :name => "my_join1", :unique => true
end