Próbuję rozwiązać dość powszechne (jak myślałem) zadanie.Szyny has_many w formularzu z polami wyboru i dodatkowym polem w modelu łączenia
Są tam trzy modele:
class Product < ActiveRecord::Base
validates :name, presence: true
has_many :categorizations
has_many :categories, :through => :categorizations
accepts_nested_attributes_for :categorizations
end
class Categorization < ActiveRecord::Base
belongs_to :product
belongs_to :category
validates :description, presence: true # note the additional field here
end
class Category < ActiveRecord::Base
validates :name, presence: true
end
Moje problemy zaczynają się, gdy chodzi o nową formę produktu/edycji.
Podczas tworzenia produktu muszę sprawdzić kategorie (za pomocą pól wyboru), do których należy. Wiem, że można tego dokonać, tworząc pola wyboru o takiej nazwie, jak "product [category_ids] []". Ale muszę również podać opis dla każdej sprawdzonej relacji, która będzie przechowywana w modelu łączenia (kategoryzacja).
Widziałem te piękne Railscasty na złożonych formularzach, polach przyzwyczajeń itp. Przeszukując StackOverflow prawie nie. Ale mi się nie udało.
Znalazłem jeden post, który opisuje prawie dokładnie ten sam problem, co mój. Ostatnia odpowiedź ma dla mnie sens (wygląda na to, że jest to właściwa droga). Ale tak naprawdę nie działa dobrze (tj. Jeśli sprawdzanie poprawności nie powiedzie się). Chcę, aby kategorie były wyświetlane zawsze w tej samej kolejności (w nowych/edytowanych formularzach, przed/po sprawdzaniu poprawności) i pola wyboru pozostawały tam, gdzie były, jeśli walidacja się nie powiedzie, itp.
Dowolny doceniany. Jestem nowy w Railsach (przełączanie z CakePHP), więc proszę o cierpliwość i napisz jak najdokładniej. Wskaż mnie we właściwy sposób!
Dziękuję. :)
ładnie wykonane. Czuję, że może być łatwiejszy sposób. – courtsimas
Dziękuję bardzo za dzielenie się, musiałem również uzupełnić http://stackoverflow.com/a/15920542/148421, ponieważ moje wartości, gdzie nie są zapisywane i brakowało mi sposobu zezwalania na zagnieżdżone atrybuty – Andrea