Rails 5 中 accepts_nested_attributes_for 不起作用

Rails 5 中 accepts_nested_attributes_for 不起作用。

如果你在 Rails 5 中使用 accepts_nested_attributes_for并且是 has_many 的关系,那么你可能需要使用inverse_of 这个选项。

具体见下面实例

Model

有三个 model 分别为 course, section 与 assignments。

classCourse<ApplicationRecord

        has_many:sections,dependent: :destroy

        has_many:assignments,through: :sections

end

classSection<ApplicationRecord

        belongs_to:course

        has_many:assignments,dependent: :destroy

          accepts_nested_attributes_for:assignments,allow_destroy: true

end

classAssignment<ApplicationRecord

    belongs_to:section

end

Controllers

classAdmin::SectionsController<ApplicationController

        before_action:authenticate_user!

        before_action:admin_required

        def    new

                @course=Course.find(params[:course_id])

                @section=@course.sections.new

                @section.assignments.build

        end

        def  create

            @section=Section.new(section_params)

            @course=Course.find(params[:course_id])

            @section.course_id=@course.id

            if@section.save

                   redirect_to     admin_course_sections_path(@course)

              else

                     render:new

end

end

private

def    section_params

           params.require(:section).permit(:title,:content,:course_id,

                                                        assignments_attributes: [:id,:title,:content,:_destroy])

end

end

一直未能成功添加assignments

后来加上了 inverse_of 之后,马上可以了。

classSection<ApplicationRecord

            belongs_to:course

            has_many:assignments,dependent: :destroy,inverse_of: :section

            accepts_nested_attributes_for:assignments,allow_destroy: true

end


原文:https://booox.github.io/2018/06/10/rails-nested-attributes-not-working/

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容