Вложенная в Rails модель с formtastic пропускает одно поле? - PullRequest
2 голосов
/ 29 октября 2011

У меня есть эта структура моделей

class Tournament < ActiveRecord::Base
  AGES = ["5u", "6u", "7u", "8u"]
  has_many  :courts, :dependent => :destroy
  accepts_nested_attributes_for :courts, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => true

class Court < ActiveRecord::Base
  belongs_to :tournament, :autosave => true
  has_many  :ages, :dependent => :destroy
  accepts_nested_attributes_for :ages, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => true

class Age < ActiveRecord::Base
  belongs_to :court

Теперь мои формы выглядят так

_form.html.erb

<%= semantic_form_for @tournament do |f| %>
<%= f.inputs do %>
  <%= f.input :name, :hint => "What is the name of the Tournament?" %>
<%= f.semantic_fields_for :courts do |builder| %>
       <%= render :partial => "court_fields", :locals => { :f => builder } %>
   <% end %>

_court_fields.html.erb

<div class="nested_fields">
<%= f.input :name, :input_html => {:class => "name"} %>
<%= f.semantic_fields_for :ages do |builder| %>
  <%= render :partial => "age_fields", :locals => { :f => builder } %>
<% end %>

_age_fields.html.erb

 Testing ...am I getting in here
<%= f.input :name, :as => :check_boxes, :collection => Tournament::AGES, :input_html => {:class => "age_limits"} %>

кажется, что все работает хорошо, за исключением того, что ничего не отображается в частичке ages_fields ... не флажки и даже не фиктивный текст Testing ...am I getting in hereне отображаются .... какие-либо идеи, что может быть причиной проблемы

1 Ответ

3 голосов
/ 29 октября 2011

Очевидная причина, о которой я могу подумать: вы уверены, что у вашего Court есть ages?

[РЕДАКТИРОВАТЬ] То, что Court имеет отношение, действительно было для меня ясным.Но ваш код будет показывать age для court, если он уже существует.

Исходя из вашего вывода в комментариях: у суда нет фактических возрастов, поэтому возрасты не отображаются.

Если вы делаете это в контроллере:

def new
  @tournament = Tournament.new
  @tournament.courts.build
  @tournament.courts[0].ages.build  
end

Это обеспечит наличие как минимум одного (пустого) двора и одного (пустого) возраста.

В противном случае вы также можете рассмотреть возможность использования драгоценного камня, такого как кокон , для динамического добавления новых элементов при необходимости.

Надеюсь, это поможет.

...