Search code examples
ruby-on-railsformsassociationsform-for

Rails nested form for complex associations


Problems:

  • =rfv.text_area :value render void textarea in edit action (but in db this field has value)
  • can't get array of role_field_values[] in params

My models and associations:

class Participant < ActiveRecord::Base
  belongs_to :role
  has_many :role_field_values, dependent: :destroy
  accepts_nested_attributes_for :role_field_values
end

class Role < ActiveRecord::Base
  has_many :role_fields
  has_one :participant
end

class RoleField < ActiveRecord::Base
  belongs_to :role
  has_many :role_field_values
end

class RoleFieldValue < ActiveRecord::Base
  belongs_to :participant
  belongs_to :role_field
end

My form edit.slim:

=simple_form_for [@project.becomes(Project), @participant] do |f|
  =f.error_notification
  h4 [email protected]
  .form-inline
    =f.association :role, remote: true
    =f.input :status
  #role-fields

    =fields_for :role_fields_values do |rfv|
      [email protected]_fields.each do |role_field|
        .form-group
          =rfv.hidden_field :role_field_id, value: role_field.id
          br
          =rfv.label role_field.name
          =rfv.text_area :value, class: 'form-control'

  .form-actions
    = f.button :submit

Solution

  • Use f.fields_for instead of fields_for