Dodawanie jak w cakePHP

Aby dodać dane w cake wystarczy ponazywać odpowiednio nazwy formularzy i w kontrolerze wywołać:

$this->Model->save($this->data);

Czy istnieje analogiczny automat w Railsach ? Chodzi o to, żeby nie robić:

model.pole1 = ... model.pole2 = ...
Jak zaimplementować taki automat w datamapper ?

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.

Bomba ! Czy to jest niezależne od implementacji (AR - datamapper) - czy zależne ?

Cieszy mnie Twój entuzjazm - właśnie o to w Railsach chodzi, żeby było szybko, łatwo i przyjemnie :slight_smile:

A co do zależności mechanizmu od AR, to w zasadzie jest to zależne o tyle, że:

  1. script/generate scaffold zagląda do bazy danych przy generowaniu formularza (bo niby skąd ma wiedzieć jakie pola są w modelu?)
  2. 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.

Ale ja nie będę dziedziczył po ActiveRecord (i w tym właśnie problem), będę używał datamapper !

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!

hint: DataMapper wzoruje się na AR.

btw,

CakePHP też.

Masz rację - przepraszam. Już sam kombinuję. Ale wcześniejsze wypowiedzi były dla mnie bardzo kształcące.

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.

Wtrace swoje 3 gr.

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.