Вложенные атрибуты в форме не видны
Я, вероятно, упускаю что-то простое, но я пробовал несколько вещей безрезультатно. Мне нужно иметь возможность редактировать существующую дорожку (используя 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