ruby-on-rails – 使用强参数插入和更新嵌套的`belongs_to`关联
发布时间:2020-12-17 02:39:05 所属栏目:百科 来源:网络整理
导读:我有一个学生可以报名参加课程的表格.当用户提交表单时,他就会注册该课程并保存他的付款信息.换句话说,创建了一个Enrollment对象并更新了Student对象…除了我无法让学生更新.这可能吗?如果是这样,怎么样? 我的模特…… class Student ActiveRecord::Base h
我有一个学生可以报名参加课程的表格.当用户提交表单时,他就会注册该课程并保存他的付款信息.换句话说,创建了一个Enrollment对象并更新了Student对象…除了我无法让学生更新.这可能吗?如果是这样,怎么样?
我的模特…… class Student < ActiveRecord::Base has_many :enrollments end class Enrollment < ActiveRecord::Base belongs_to :student accepts_nested_attributes_for :student end 我的(缩写)形式…… <%= form_for :enrollment,html: { id: "enrollment_form" } do |f| %> <%= f.fields_for :student_attributes do |student_builder| %> <%= student_builder.hidden_field :payment_name %> <% end %> <%= f.hidden_field :payment_token %> <div class="field terms"> <%= f.check_box :agreed_to_terms %> <%= f.label :agreed_to_terms,"I agree to the terms and conditions." %> </div> <% end %> 我的控制器…… class EnrollmentsController < ApplicationController def create @enrollment = Enrollment.new(enrollment_params) @enrollment.clazz_id = @clazz.id @enrollment.student_id = @student.id @enrollment.save end private def enrollment_params params.require(:enrollment).permit(:payment_token,:agreed_to_terms,student_attributes: [:payment_name]) end end POST参数…… { "enrollment"=> { "student_attributes"=> { "payment_name"=> "MasterCard ending in 9840" },"payment_token"=> "CC11ho86XxVqsUW7Cn9YjCHg?1376007969212","agreed_to_terms"=> "1" },"clazz_id"=> "7" } 我已经尝试过在表单构建器中学生,学生,_attributes的每个排列,但它们似乎都不起作用. 解决方法
好的,我看到了一些事情:
>嵌套属性,如the API中所述,“允许您通过父级保存关联记录的属性”.这意味着 class Enrollment < ActiveRecord::Base belongs_to :student accepts_nested_attributes_for :student end 本质上不起作用,因为您试图接受来自父级的嵌套属性.因此,您需要首先重新考虑您的Active Record配置. 如果我们假装全部平方,那么更多的语法错误是: <%= f.fields_for :student_attributes do |student_builder| %> 同 <%= f.fields_for :students do |student_builder| %> 这可能令人困惑,但是传递:学生到fields_for帮助器调用嵌套的学生对象,而:student_attributes是来自fields_for产生的POST参数的哈希键. private def enrollment_params params.require(:enrollment).permit(:payment_token,student_attributes: [:payment_name,:id]) end 我不确定这是否一切,但希望这是一个开始.祝好运. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |