嵌套形式和强参数 - rails 4

Nested forms and strong parameters - rails 4

我对表单和强参数有疑问。我看到很多人都遇到过这样的问题,但向他们提出的任何建议似乎都没有用。

我的表格:

<%= form_for(@student) do |f| %>
    <%= f.label :school_id %>
    <%= f.text_field :school_id, class: 'form-control' %>
    ...
    <%= f.fields_for :enrollments do |enrol_form| %>
       <%= enrol_form.label :date , "Enrollment date", class: 'form-control' %>
       <%= enrol_form.date_field :date , class: 'form-control' %>
       <%= enrol_form.hidden_field :reason, value: "Entered on system" %>
    <% end %>
    ...
<% end %>

型号:

class Student < ActiveRecord::Base
   include PhoneValid
   has_many :enrollments, inverse_of: :student
   validates :enrollments, :presence  => { message: "Must have at least one enrollment event" } 
   accepts_nested_attributes_for :enrollments
end

class Enrollment < ActiveRecord::Base
  belongs_to :student
  default_scope -> { order(date: :asc) }
  validates :date, presence:true
  validates :enroll_wd, inclusion: {in: %w(ENROLL WD), messages: "%{value} must be either WD or ENROLL"}
end

控制器:

class StudentsController < ApplicationController
  def create     
    @student = Student.new(student_params)
    @student.save 
  end

  def student_params
    params.require(:student).permit(:school_id, :cellphone, :attendance_officer_id, :attendance_officer_type, :language_preferred, {enrollment_attributes: [:date, :reason, :id]})
  end
end

根据debug(params)我的表格输出是:

--- !ruby/hash:ActionController::Parameters  
utf8: "✓"  
authenticity_token:   >cuk8Y+d8fHhJ3mU7wtRYtyDJoiYaG8lfzHvdGVBUI+1qmH7xQr20BHsBAFRT4r1EfDb/MMbxMq8rbKw3Cf2Y1A==  
student: !ruby/hash:ActionController::Parameters  
  school_id: '234234'  
  cellphone: '234234234'  
  language_preferred: en  
  enrollments_attributes: !ruby/hash:ActionController::Parameters  
     '0': !ruby/hash:ActionController::Parameters  
       date: '2015-07-10'  
       reason: Entered on system  
  attendance_officer_id: '8'  
  attendance_officer_type: User  
commit: Save student  
controller: students  
action: create  

student_params的输出是:

{"school_id"=>"234234", "cellphone"=>"234234234", "attendance_officer_id"=>"8", "attendance_officer_type"=>"User", "language_preferred"=>"

我一直在尝试我可以在论坛上找到的各种不同格式的 student_params,并得出结论,问题一定出在其他地方 - 我是否正确创建了表格?我的模型有问题吗?

谢谢你能给我的任何帮助。

沃尔特

尝试将您的student_params更改为以下

def student_params
  params.require(:student).permit(:school_id, :cellphone, :attendance_officer_id, :attendance_officer_type, :language_preferred, enrollments_attributes: [:date, :reason, :id])
end