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/
网友评论