Jak zbudować formularz do has_many :through?

W skrócie, mam:

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?

Tu powinieneś znaleźć rozwiązanie :slight_smile:

a has_many: line_items i tak musisz dodać, bo nie będzie działało samo has_many :products, :through => :line_items

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 :(

poczytaj sobie uważnie tego pdf-a

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=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?