Chce dodac do formularza tworzacego nowego klienta mozliwosc wybrania konkretnego zamowienia poprzez checkbox. Co powinienem dodac do metody create zeby rails zapisywaly relacje w tabeli customers_orders
Modele:
class Order < ActiveRecord::Base
has_and_belongs_to_many :customers
end
class Customer < ActiveRecord::Base
has_and_belongs_to_many :orders
end
Kontroler
[code=ruby] def new @customer = Customer.new @orders = Order.find(:all)
end
Tworzac to korzystalem z railcast habtm checkbox. W zasadzie wszystko dziala poniewaz dodalem kilka wpisow przez konsole ale nie wiem jak to przeniesc do kontrolera. No i to zwykly prosty zapis z uzyciem habtm wiec musi byc na to jakis prosty sposob
Pamiętaj jeszcze o tym, że jeśli odznaczysz wszystkie check boxy, to kontroler oleje wartość customer[order_ids], bo będzie w niej nil, a nie pusta tablica. Możesz to obejść czymś takim w kontrolerze:
Pamiętaj jeszcze o tym, że jeśli odznaczysz wszystkie check boxy, to kontroler oleje wartość customer[order_ids], bo będzie w niej nil, a nie pusta tablica. Możesz to obejść czymś takim w kontrolerze:
params[:customer][:order_ids] ||= []
[/quote]
Niestety nie pomoglo.
przy uzyciu konsoli dodalem tak jeden rekord
@s = customer.new #ustawienie wartosci w tym miejscu @s.order_ids = [5,6] @s.save
W tabeli laczacej customers_orders pojawily sie dwa nowe rekordy. Podejrzewam ze musze w kontrolerze dodac linijke typu:
@customer.order_ids = tablica przeslana z formularza
Chodziło mi o to, że musisz usunąć znak ‘@’ i ustalić nazwę pola nie na @customer[order_ids], a customer[order_ids] - zauważ, że w parametrach masz już hash: {"customer"=>{"name"=>"trzy", ...}}
i dodatkowo masz hash {"@customer" => {"order_ids" => ["5","6"]}}
, a powinieneś mieć wszystkie dane pod jednym kluczem - “customer”:
Zrestartowalem serwer i wszystko zadzialalo tak jak powiedziales ;). Dziekuje bardzo za pomoc
Edit:
<% for customer in @customer %>
<%=h customer.name%><br/>
<%=h customer.age%><br/>
<% for order in customer.orders %>
<li><%= order.title%></li>
<% end %>
<% end %>
Tak wyglada moj index.rhtml. Metoda prob i bledow udalo mi sie dojsc do tego. Zastanawiam sie jednak jak inaczej moglbym sie dobrac do order.title dla konkretnego customer. customer.orders.title ?
np:
@test = Customer.find(1) @test.orders zwraca #Order:0x7d22828#Order:0x7d223a8 ten klient posiada dwa zamowienia. Czy jest jakas mozliwosc zebym bez uzywania petli wyciagnal nazwe tylko jednej kategori ? @test.orders[1]