0

У меня проблема с формой и сильными параметрами. Я вижу, что многие прошли передо мной с такими проблемами, но ничто не предлагало им работать.Вложенные формы и сильные параметры - рельсы 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", "сотовый телефон" => "234234234", "attendance_officer_id" => "8", "attendance_officer_type" => "Пользователь «„language_preferred“=>»

Я пытался каждый различный формат student_params, что я могу найти на на форумах и пришли к выводу, что проблема должна быть где-то еще - я создаю форму правильно? Что-то не так в моих моделях?

Благодарим за помощь, которую вы можете мне дать.

Walter

ответ

1

Попробуйте изменить 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 
+0

Это ничего не меняет - такой же вывод из 'student_params' ничего о' enrollments' – Walter

+0

@WalterBurrough У Вас есть 'new' метод определенный в контроллере? – Pavan

+0

yes @Pavan, У меня есть

def new \@student = Student.new \@student.enrollments.build end
- – Walter