Obecnie Przedmiotbelongs_toSpółka i has_manyItemVariants.mnoga fields_for stowarzyszenia has_many nie pokazuje w widoku
Próbuję użyć zagnieżdżonych fields_for do dodania pól ItemVariant poprzez formularz Item, jednak używając: item_variants nie wyświetla formularza. Jest wyświetlany tylko wtedy, gdy używam liczby pojedynczej.
Sprawdziłem moje powiązania i wydaje się, że są poprawne, czy może mieć coś wspólnego z pozycją zagnieżdżoną w Kompanii, czy też brakuje mi czegoś innego?
Z góry dziękuję.
Uwaga: w poniższych opisach pominięto kod nieodpowiedni.
EDYCJA: Nie wiem, czy to jest istotne, ale używam CanCan do uwierzytelniania.
routes.rb
resources :companies do
resources :items
end
item.rb
class Item < ActiveRecord::Base
attr_accessible :name, :sku, :item_type, :comments, :item_variants_attributes
# Associations
#-----------------------------------------------------------------------
belongs_to :company
belongs_to :item_type
has_many :item_variants
accepts_nested_attributes_for :item_variants, allow_destroy: true
end
item_variant.rb
class ItemVariant < ActiveRecord::Base
attr_accessible :item_id, :location_id
# Associations
#-----------------------------------------------------------------------
belongs_to :item
end
poz/new.html.erb
<%= form_for [@company, @item] do |f| %>
...
...
<%= f.fields_for :item_variants do |builder| %>
<fieldset>
<%= builder.label :location_id %>
<%= builder.collection_select :location_id, @company.locations.order(:name), :id, :name, :include_blank => true %>
</fieldset>
<% end %>
...
...
<% end %>
Dzięki! Działa perfekcyjnie, ale jako punkt odniesienia wykorzystałem poprawioną wersję RailsCast ep 196-Nested-model-. W jego nowej akcji zawierało tylko '@survey = Survey.new' bez budowania powiązania. Każdy pomysł, dlaczego muszę zbudować stowarzyszenie, a Ryan tego nie zrobił? – 8bithero
To railscast jest jeszcze lepsze, choć złożone, ponieważ może dynamicznie dodawać pytania w formularzu ankiety. Więc nie trzeba niczego wstępnie wypełniać. – rewritten
Chciałem tylko dodać pewne znaczenie dla tych, którzy są zdezorientowani z powodu .build i dlaczego Ryans "nie potrzebował tego. Jeśli spojrzysz na jego kod w appliation_helper na linii 3, to utworzysz instancję klasy. Tak więc zajmuje miejsce .build. Mam nadzieję, że to pomoże każdemu, kto tam jest! –