class Order < ActiveRecord::Base
has_many :products, :through => :line_items
end
LineItem zawiera: order_id, product_id, quantity i total_price.
Chciałbym, aby przy formularzu edycji Order była możliwość zmiany quantity i total_price połączonych produktów, przy czym chciałbym uniknąć dodawania has_many: line_items do modelu Order. Jak zatem wyświetlić odpowiednio kontrolki powiązanych LineItems, chociażby zwykły text_field?
Ok, z pdfa ktory podrzucasz jestem w stanie wykumac jak zbudowac widok i formularz, ktory obsluzy niejako kilka modeli. Ale to tylko 50% sukcesu dla mnie, bo to co chcę osiągnąć wiąże się z moim poprzednim opisywanym problemem.
W modelu Order mam ostatecznie:
has_many :products, :through => :line_items
has_many :line_items
Pcham teraz POSTem dane do aplikacji w formacie XMLa i mam np. coś takiego:
[code]
jan kowalski
ulicowa 11
[/code]
To leci do mojaaplikacja.com/orders i elegancko do bazy się wrzuca.
Teraz chciałbym wrzucić razem z tym zamówieniem troszkę LineItems, robię tak:
[code]
jan kowalski
ulicowa 11
1 ## tej linijki nie jestem pewien, bo przeciez nie znam id aktualnie wrzucanego order
5
2
[/code]
Niestety coś jest nie tak, dostaję komunikat:
[code]LineItem(#86544900) expected, got Array(#74996330)[/code]
Czy jakoś inaczej powinienem budować tego XMLa? Myślałem, że wykumam sobie format tego XMLa budując najpierw odpowiedni formularz w Rails, a potem analizując powstały kod HTML, ale niestety nie jest to przełożenie 1:1 :(
no więc w taki sposób nie można tworzyć powiązanych modeli, przynajmniej nie przez bezpośrednie przypisywanie (będzie to możliwe w Rails 2.2).
U ciebie rails próbuje przypisać zwykłą tablice do asocjacji line_items zamiast właściwego modelu czy tam modeli. Żeby działało musisz stworzyć dodatkową metodę która przerobi tablicę na właściwe modele. Zobacz sobie w pdf-ie metody existing_task_attributes i new_tast_attributes i na ich podstawie stwórz swoje
[quote=ronin]zakładam, że kontrolerze orders masz coś takiego
@order = Order.create(params[:order])
no więc w taki sposób nie można tworzyć powiązanych modeli, przynajmniej nie przez bezpośrednie przypisywanie (będzie to możliwe w Rails 2.2).
U ciebie rails próbuje przypisać zwykłą tablice do asocjacji line_items zamiast właściwego modelu czy tam modeli. Żeby działało musisz stworzyć dodatkową metodę która przerobi tablicę na właściwe modele. Zobacz sobie w pdf-ie metody existing_task_attributes i new_tast_attributes i na ich podstawie stwórz swoje[/quote]
mamy więc rails 2.2.2 i jak to zrobić w tej wersji?