Вложенная модель Rails с formtastic пропускает одно поле?

#ruby-on-rails #ruby #ruby-on-rails-3 #formtastic #nested-attributes

#ruby-on-rails #ruby #ruby-on-rails-3 #formtastic #вложенные атрибуты

Вопрос:

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

 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. В _court_fields.html.erb вы вызываете частичное age_fields , а частичное называется _ages_fields.html.erb (обратите внимание на s в возрасте). Попробуйте изменить это.

2. это была опечатка … частичное имя _age_fields.html.erb

3. хороший улов, но частичное имя указано правильно

Ответ №1:

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

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

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

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

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

Это гарантирует, что у вас есть хотя бы один (пустой) корт и один (пустой) возраст.

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

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

Комментарии:

1. если вы посмотрите на модели, которые у меня есть выше, у него есть …. вот мой вывод консоли rails c = Court.first => #][адрес]», город: «турнир

2. c.выберите возраст загрузки (0,3 мс) ages .* ages ОТКУДА ages . court_id = 4 => []

3. Это было то, что я улучшил: у суда нет фактического возраста, поэтому он не отображается. Я соответствующим образом отредактировал свой ответ.