#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. Это было то, что я улучшил: у суда нет фактического возраста, поэтому он не отображается. Я соответствующим образом отредактировал свой ответ.