Вложенные атрибуты в форме не видны

Я, вероятно, упускаю что-то простое, но я пробовал несколько вещей безрезультатно. Мне нужно иметь возможность редактировать существующую дорожку (используя ActiveAdmin) и сохранять запись, обновляя ее статус эксклюзивности.

у меня есть Tracks модель

#app/models/track.rb:

  has_many :exclusivities, class_name: 'Exclusivity', dependent: :destroy

  accepts_nested_attributes_for :exclusivities

  attr_accessible :exclusivities_attributes

  #whether or not track is exclusive [boolean]
  attr_accessible :exclusive

  #whether or not track is fully exclusive and should be pulled off the front end [boolean]
  attr_accessible :full_exclusivity

и я только что создал Exclusivity модель.

#app/models/exclusivity.rb    

  belongs_to :track
  attr_accessible :end_date, :industry, :track_id, :notes, :staff_notes

и моя форма:

<%= semantic_form_for [:manage, @track], html: {data: {secondary:true}} do |f| %>

a bunch of inputs.....

<%= f.inputs "Track Exclusivity", class:'inputs align-left' do %>
  <%= f.input :exclusive %>
  <%= f.input :full_exclusivity,
  label: "Fully Exclusive" %>
  <%= f.fields_for :exclusivities do %>
    <%= f.input :notes %> 
    <%= f.input :staff_notes %> 
    <%= f.input :industry %> 
    <%= f.input :end_date, as: :date_picker %>
  <% end %>
<% end %>

Когда я иду к редактированию трека, атрибуты Track присутствуют, но вложенные (атрибуты Exclusivectivity) отсутствуют (я могу установить флажки для эксклюзивного трека и full_exclusctivity).

Я также пытался использовать semantic_fields_for а также f.inputs :for => exclusivities

Что мне здесь не хватает?

3 ответа

Решение

Вы забыли передать конструктор форм в блок fields_for.

<%= f.inputs "Track Exclusivity", class:'inputs align-left' do %>
  <%= f.input :exclusive %>
  <%= f.input :full_exclusivity,
  label: "Fully Exclusive" %>
  <%= f.fields_for :exclusivities do |ff| %>
    <%= ff.input :notes %> 
    <%= ff.input :staff_notes %> 
    <%= ff.input :industry %> 
    <%= ff.input :end_date, as: :date_picker %>
  <% end %>
<% end %>

Фактическая проблема заключалась в следующем: поля формы не отображались, если атрибуты исключительности дорожки были пусты. Поэтому я автоматически создаю связанные атрибуты, как только вы нажмете на контроллер редактирования, используя этот код. Делает трюк!

 def edit
   @track = Track.includes(:licenses).find(params[:id])
      if @track.exclusivities.empty?
        @track.exclusivities.build
      end
    @track.save
 end 
<%= form_for @person do |person_form| %>
  ...
  <%= person_form.fields_for :projects do |project_fields| %>
    <% if project_fields.object.active? %>
      Name: <%= project_fields.text_field :name %>
    <% end %>
  <% end %>
  ...
<% end %>

от http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for

Другие вопросы по тегам