Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何通过Rails中的另一个模型访问关联模型?_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 如何通过Rails中的另一个模型访问关联模型?

Ruby on rails 如何通过Rails中的另一个模型访问关联模型?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,更新(具体和更详细的先前版本如下): 我正在开发一个电视台网站。以下是我的课程部分的要求: 每个程序都有一个类别 每个程序都有一个子类别 每个类别都有许多子类别 每个类别都有许多程序 每个子类别都有一个类别 每个子类别都有许多程序s 我想检索所有这三个要关联的模型。例如,我应该能够从我的视图中检索以下数据: 而: p = Program.find(1) p_cat = ProgramCategory.find(1) p_subcat = ProgramSubcategory.find(1) 我

更新(具体和更详细的先前版本如下):

我正在开发一个电视台网站。以下是我的课程部分的要求:

  • 每个
    程序
    都有一个
    类别
  • 每个
    程序
    都有一个子类别
  • 每个
    类别
    都有许多
    子类别
  • 每个
    类别
    都有许多
    程序
  • 每个
    子类别
    都有一个
    类别
  • 每个
    子类别
    都有许多
    程序
    s
  • 我想检索所有这三个要关联的模型。例如,我应该能够从我的视图中检索以下数据:

    而:

    p = Program.find(1)
    p_cat = ProgramCategory.find(1)
    p_subcat = ProgramSubcategory.find(1)
    
    我应该能够检索并编辑以下内容:

    p.program_category
    p.program_subcategory
    

    您可以在下面看到我为达到这些要求所做的尝试。你可以向我推荐一种完全不同的方法,或者纠正我的错误

    多谢各位

    ============================================================

    我有三种型号。它们应该相互嵌套

    程序类别>程序子类别>程序

    这是我的密码:

    程序类别模型:

     has_many :programs
     has_many :program_subcategories
    
    belongs_to :program_category
    has_many :programs
    
    程序子类别模型:

     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\u子类别时,我只收到一个nil

    即使设置了我的子类别,也设置了我的程序类别,为什么我不能直接访问
    Program.Program\u子类别

    当我键入
    program\u category.program\u subcategories
    时,我会收到该类别拥有的所有子类别。但是我不能直接从
    程序
    对象中获取子类别

    我的计划如下。任何帮助都是值得的

    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
    

    这个设计有点奇怪。如果你需要像这样筑巢

    ProgramCategory > ProgramSubcategory > Program
    
    那你需要

    class Program < ActiveRecord::Base
      belongs_to :program_subcategory
    end
    
    class ProgramSubcategory < ActiveRecord::Base
      belongs_to :program_category
      has_many :programs
    end
    
    class ProgramCategory < ActiveRecord::Base
     has_many :programs, :through => :program_subcategories
     has_many :program_subcategories
    end
    

    现在是

    我应该能够检索并编辑以下内容:

    p.program_category
    p.program_subcategory
    
    p、 程序类别

    想象一下,你有一个类别电影的子类别喜剧节目

    您表示希望能够直接编辑程序类别(如果我理解正确),如下所示:

    p.program_category = ProgramCategory.find_by_name("Sports")
    
    那个么,你们期望程序的子类别是什么呢?一旦运动有许多子类别?你希望它是空白的吗

    因此,在本设计中,更改程序类别的唯一方法是更改程序的子类别:

    p.program_subcategory = ProgramSubcategory.find_by_name("Tennis")
    
    这将是曼克项目的分类==体育,因为网球属于体育


    注意:如果您确实希望有时直接更改程序的类别,将其子类别留空,当然需要另一种设计。我不认为这很难,但它需要更多的工作,而Rails AR Associations magic的帮助更少。

    您是否尝试了program_subcategory.program以列出该子类别下的所有程序?我尝试了program_subcategory.programs。它也给零。如果我手动将Subcategory设置为program object,它可能会给我程序对象;但我希望它是从分类模型中收集的。因为类别模型知道它有子类别。类别知道它有哪些子类别,但它不知道程序属于这些子类别中的哪一个。在您的设计中,
    程序
    的类别和子类别都有外键,因此每个程序可以分别属于某个类别和某个子类别。看看我对嵌套设计的回答。我明天会在办公室试用,并通知你结果,谢谢你的建议!“属于”怎么可能有“通过”选项?当然,当我执行你所说的一切时,我有一个
    ArgumentError:Unknown key:through
    错误。结果:不可能。哦,你完全正确,对此感到抱歉。我编辑了答案。您可以通过关联删除错误的
    所属对象。但您仍然可以通过
    program.program\u subcategory.program\u category
    Nope>访问程序子类别的类别。。。它不起作用。现在,即使是
    程序。程序类别
    也会给出一个错误。好的,我明白了。请告诉我,您是否希望程序的类别始终等于程序的子类别?