activeadmin中多个嵌套的has_many

时间:2017-07-13 08:52:37

标签: ruby-on-rails activeadmin

我有以下course.rb型号

has_many :chapters
  has_many :lectures, through: :chapters
  has_many :enrols
  has_many :contents, through: :lectures
  has_many :users, -> { uniq }, through: :enrols
  accepts_nested_attributes_for :chapters, allow_destroy: true
  accepts_nested_attributes_for :lectures, allow_destroy: true

course.rb有效的管理文件

form title: 'Edit Course' do |f|
    f.inputs 'Details' do
      f.input :course_name
      f.input :course_subtitle
      f.input :course_description
      f.input :video_link
      f.input :course_language
      f.input :status
      f.input :course_image
    end

    # has_many :contents do |content|
    #   content.input :description
    #   content.input :attachment
    # end

    f.has_many :chapters, allow_destroy: true do |chapter|
      # chapter.input :title
      chapter.has_many :lectures do |lecture|
        # lecture.input :title
        # lecture.has_many :contents do |content|
        #   content.input :description
        # end
        lecture.input :title
      end
    end
    actions
  end

我正在尝试在课程表单中编辑content course,并且它需要多个嵌套的has_many,因为它的has_many数量通过关系。

现在我得到undefined method new_record?'为nil:NilClass`错误

怎么做?有没有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

  

未定义的方法new_record?'为零:NilClass`

根本原因:

chapter.has_many :lectures do |lecture|

<强>原因:

accepts_nested_attributes_for :lectures, allow_destroy: true模型中有Course,因此无法在Chapter

内进行嵌套式演讲

<强>解决方案:

chapter.has_many :lectures do |lecture|

应该是

f.has_many :lectures do |lecture|

如果您想在chapter内进行嵌套讲座,请从accepts_nested_attributes_for :lectures, allow_destroy: true模型中移除Course,然后将其添加到Chapter模型中。< / p>

  

如果我只想添加讲座怎么办?你的建议似乎有效   但它给了我添加lecutre和章节

的选项

在这种情况下,不需要f.has_many :chapters, allow_destroy: true do |chapter|。只需f.has_many :lectures do |lecture|