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 multiple与同一型号有一个关系_Ruby On Rails_Ruby_Ruby On Rails 3_Has One_Rails Activerecord - Fatal编程技术网

Ruby on rails Rails multiple与同一型号有一个关系

Ruby on rails Rails multiple与同一型号有一个关系,ruby-on-rails,ruby,ruby-on-rails-3,has-one,rails-activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Has One,Rails Activerecord,我正在开发一个Rails应用程序,目前我有两个模型-主题和课程。 一门学科有三种不同类型的课程——讲座、辅导课和实验课。我建模,使有3个有一个教训模型 现在,我正在尝试为主题和课程创建嵌套表单,但保存的讲座、教程和实验室始终是第一个呈现的表单。 i、 我有3个嵌套表单,分别用于讲座、教程和实验室,但保存的讲座、教程和实验室始终是第一次构建的表单。在我的代码中,讲座是第一次构建的,因此教程和实验室的属性将遵循我为讲座填写的属性 我不确定我哪里出了问题,或者即使在这种情况下有多个has_-one关系

我正在开发一个Rails应用程序,目前我有两个模型-主题和课程。 一门学科有三种不同类型的课程——讲座、辅导课和实验课。我建模,使有3个有一个教训模型

现在,我正在尝试为主题和课程创建嵌套表单,但保存的讲座、教程和实验室始终是第一个呈现的表单。 i、 我有3个嵌套表单,分别用于讲座、教程和实验室,但保存的讲座、教程和实验室始终是第一次构建的表单。在我的代码中,讲座是第一次构建的,因此教程和实验室的属性将遵循我为讲座填写的属性

我不确定我哪里出了问题,或者即使在这种情况下有多个has_-one关系是否有效,因此任何建议都将不胜感激

相关代码如下:

主体模式

class Subject < ActiveRecord::Base

  has_one :lecture, :class_name => "Lesson"
  has_one :laboratory,:class_name => "Lesson"
  has_one :tutorial, :class_name => "Lesson"

  accepts_nested_attributes_for :lecture
  accepts_nested_attributes_for :laboratory
  accepts_nested_attributes_for :tutorial 

end

如果有人能帮我找出哪里出了问题,我将不胜感激。如果我不应该创建这样的多个关系,我想就如何实际呈现3个表单以及指示课程类型的默认字段提供一些建议。

我不确定这是否有效,但我的建议是使用AR继承

class Lesson < ActiveRecord::Base
end

class LectureLesson < Lesson
  belongs_to :subject
end

class LaboratyLesson < Lesson
  belongs_to :subject
end

class TutorialLesson < Lesson
  belongs_to :subject
end

class Subject
  has_one :lecture_lesson
  has_one :laboratory_lesson
  has_one :tutorial_lesson

  accepts_nested_attributes_for :lecture_lesson
  accepts_nested_attributes_for :laboratory_lesson
  accepts_nested_attributes_for :tutorial_lesson
end
课程
迁移

class LessonsAndSubjects < ActiveRecord::Migration
  def up
    remove_column :subjects, :lesson_id

    add_column :subjects, :lecture_lesson_id, :integer
    add_column :subjects, :laboratory_lesson_id, :integer
    add_column :subjects, :tutorial_lesson_id, :integer

    add_column :lessons, :type, :string

    add_index :subjects, :lecture_lesson_id
    add_index :subjects, :laboratory_lesson_id
    add_index :subjects, :tutorial_lesson_id
  end

  def down
    remove_column :subjects, :lecture_lesson_id
    remove_column :subjects, :laboratory_lesson_id
    remove_column :subjects, :tutorial_lesson_id

    remove_column :lessons, :type

    add_column :subjects, :lesson_id, :integer
  end
end
class lesson和subjects

这更有意义,可能会解决嵌套属性的问题

实际上,从rorra的答案来看,缺少一点,您需要为每个“子项”添加多态关联,以避免出现查询问题

class Lesson < ActiveRecord::Base
  belongs_to :subject
end

class LectureLesson < Lesson
  belongs_to :polymorphic_lecture_lesson, polymorphic: true
end

class Subject
  has_one :lesson
  has_one :lecture_lesson, as: :polymorphic_lecture_lesson

  accepts_nested_attributes_for :lesson
  accepts_nested_attributes_for :lecture_lesson
end

非常有用。在我的应用程序中缺少外键声明。
class Lesson < ActiveRecord::Base
end

class LectureLesson < Lesson
  belongs_to :subject
end

class LaboratyLesson < Lesson
  belongs_to :subject
end

class TutorialLesson < Lesson
  belongs_to :subject
end

class Subject
  has_one :lecture_lesson
  has_one :laboratory_lesson
  has_one :tutorial_lesson

  accepts_nested_attributes_for :lecture_lesson
  accepts_nested_attributes_for :laboratory_lesson
  accepts_nested_attributes_for :tutorial_lesson
end
class LessonsAndSubjects < ActiveRecord::Migration
  def up
    remove_column :subjects, :lesson_id

    add_column :subjects, :lecture_lesson_id, :integer
    add_column :subjects, :laboratory_lesson_id, :integer
    add_column :subjects, :tutorial_lesson_id, :integer

    add_column :lessons, :type, :string

    add_index :subjects, :lecture_lesson_id
    add_index :subjects, :laboratory_lesson_id
    add_index :subjects, :tutorial_lesson_id
  end

  def down
    remove_column :subjects, :lecture_lesson_id
    remove_column :subjects, :laboratory_lesson_id
    remove_column :subjects, :tutorial_lesson_id

    remove_column :lessons, :type

    add_column :subjects, :lesson_id, :integer
  end
end
class Lesson < ActiveRecord::Base
  belongs_to :subject
end

class LectureLesson < Lesson
  belongs_to :polymorphic_lecture_lesson, polymorphic: true
end

class Subject
  has_one :lesson
  has_one :lecture_lesson, as: :polymorphic_lecture_lesson

  accepts_nested_attributes_for :lesson
  accepts_nested_attributes_for :lecture_lesson
end
add_column :lessons, :polymorphic_lecture_lesson_id, :integer, index: true
add_column :lessons, :polymorphic_lecture_lesson_type, :integer, index: true