O ile dobrze rozumiem (nie używałem nigdy cakePHP) chodzi Ci o to, żeby dane, które przychodzą do kontrolera z formularza można było za jednym zamachem np. zapisać do DB.
Jeśli o to chodzi, to o ile w widoku odpowiednio ponazywałeś pola, to
w kontrolerze możesz to zrobić za pomocą polecenia (np. dla ksiazki)
@book = Book.new(params[:book])
@book.save
Jeśli nie wiesz jakie powinny być nazwy poszczególnych pól w formularzu, to
najprościej dowiesz się tego korzystając z generatofa scaffold.
Najpierw powinienieś wygenerować model (pozostańmy przy książce):
script/generate model book
Automatycznie zostanie utworzona migracja db/migrate/01_create_books.rb (o ile wcześniej nie
było żadnych migracji). W niej powinieneś określić schemat książki:
create_table :books do |t|
t.column :title, :string
t.column :pages, :integer
....
end
Jeśli teraz wydasz polecenia:
rake db:migrate
script/generate scaffold book books
to powinny zostać utworzony widoki w app/views/books. W szczególności powinien
zainteresować cię partial _form.rhtml, w którym znajdują się automatycznie
wygenerowane definicje odpowiednich pól formularza.
Cieszy mnie Twój entuzjazm - właśnie o to w Railsach chodzi, żeby było szybko, łatwo i przyjemnie
A co do zależności mechanizmu od AR, to w zasadzie jest to zależne o tyle, że:
script/generate scaffold zagląda do bazy danych przy generowaniu formularza (bo niby skąd ma wiedzieć jakie pola są w modelu?)
Konstruktor typu Book.new(params[:book]) automatycznie mapuje sobie odpowiednie parametry na pola obiektu, dzięki temu, że Book rozszerza ActiveRecord::Base
Aczkolwiek można napisać model, który będzie emulował to zachowanie. Jeśli Cię to interesuje to poszukaj na forum wątku “Walidacja bez ActiveRecord”, czy jakoś tak.
johny, a czy sprawdzenie tego na własną rękę, albo w dokumentacji, albo poprzez wklepanie tych kilku linijek kodu, jest takie ciężkie? Forum służy do rozwiązywania problemów, dyskutowania a nie do pisania zadań, które mają inni rozwiązać. Sprawdź sam!
a czemu odrazu generować rusztowanie jak można na czas developmentu wrzucic poprostu w kontrolerze scaffold :nazwa_modelu i wtedy mamy runtimowe rusztowanie.
A co za różnica w tym wypadku? Efekt taki sam, a wartość edukacyjna mojego rozwiązania chyba nawet większa. Poza tym rzadko kiedy można pozostać przy scaffold: nazwa_modelu.
ActiveScaffold(y) sa rewelacyjne do ‘typowych’ zastosowan, aby otrzymac wiecej trzeba troche pogrzebac w ich API. Mysle, ze sie oplaca bo np. do interfejsow adminstracyjnych nadaja sie znakomicie, a aplikacje typu baza danych filmow mozna napisac w 5 minut.