Article View: pl.comp.lang.ruby
Article #247Re: Czy ActiveRecord jest logiczny?
From: simon
Date: Fri, 20 Oct 2006 14:54
Date: Fri, 20 Oct 2006 14:54
67 lines
3504 bytes
3504 bytes
Jaroslaw Zabiello napisał(a):
> W ActiveRecord dosyc mętnie są zaimplementowane relacje. Np. na co wskazuje
> belongs_to(:abc)? Na klasę prawda? Tylko dlaczego z małej litery, skoro to
> klasa? A w wypadku klas MojaDziwnaKlasa już trzeba napisać belongs_to
> :moja_dziwna_klasa. Ja tu nie widzę nic oczywistego.
Jest oczywiste - metoda belongs_to faktycznie jako parametr bierze
nazwe klasy zamieniana na podkreslenia (patrz. modul Inflector).
> Ale jest jeszcze gorzej. Bo has_many najwyraźniej wskazuje już nie na klasę
> ale na tabelę. Więc pisze się belongs_to :users podczas gdy klasa jest
> User.
Jesli chodzi o has_many to podajemy tam nazwe metody ktora zwroci nam
odpowiednia kolekcje obiektow danej klasy (podanej rowniez jak argument
has_many), przyklad:
A.
class Film < ActiveRecord::Base
set_table_name 'filmy'
set_primary_key 'ID_film'
has_many :repertuar_elements,
:class_name => "Repertuar",
:foreign_key => "ID_film"
end
B.
moglo by rowniez byc:
has_many :wpisow_repertuarowych,
:class_name => "Repertuar",
:foreign_key => "ID_film"
i potem:
film = Film.find(1)
A.
film.repertuar_elements
B
film.wpisow_repertuarowych
zrwoci to samo.
Polecam jeszcze uzycie opcji w environmetn.rb:
ActiveRecord::Base.pluralize_table_names = false
(w przypadku poskich nazw tabel - moze to sporo pomoc)
>
> Można w tym się nieźle pogubić w wypadku nietypowych tabel z nietypowymi
> polami (w sensie nazw i konwencji RoR).
>
> Często mamy do czynienia z głupimi nazwami pól/tabel i wydaje mi się, że
> najlepiej jest stworzyć model który za pomocą kompozycji ponazywa wszystkie
> pola inaczej. Tylko czy to się da? W Django wszystkie pola muszą być
> definiowane w modelu i używanie innej, czytelniejszej nazwy pola w miejsce
> pola jakie siedzi w bazie, jest trywialne. AR umożliwia zmianę nazwy tabeli
> i klucza głównego. Ale co z resztą pól? Da się to ustawić bezpośrednio w
> modelu? Np. mam pole Name_VC i nie mogę używać find_by_Name_VC z powodu
> znaczka _. Chciałbym w modelu aby to było pole "name" i aby miał dostępne
> findery typu find_by_xxx.
Da sie to prosto zrobic - polecam Agile Development with Ruby On Rails
-> rozdzial 15.2 Aggregation
Pozdrowienia,
Szymon
Technical Details
Message-ID:
<1161356044.237499.195130@k70g2000cwa.googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!news.glorb.com!postnews.google.com!k70g2000cwa.googlegroups.com!not-for-mailReferences:
<cxh2344pr5ob$.1uuphognwvje6$.dlg@40tude.net>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!news.glorb.com!postnews.google.com!k70g2000cwa.googlegroups.com!not-for-mail From: "simon" <szymon.kurcab@gmail.com> Newsgroups: pl.comp.lang.ruby Subject: Re: Czy ActiveRecord jest logiczny? Date: 20 Oct 2006 07:54:04 -0700 Organization: http://groups.google.com Lines: 81 Message-ID: <1161356044.237499.195130@k70g2000cwa.googlegroups.com> References: <cxh2344pr5ob$.1uuphognwvje6$.dlg@40tude.net> NNTP-Posting-Host: 62.29.131.162 Mime-Version: 1.0 X-Trace: posting.google.com 1161356049 8229 127.0.0.1 (20 Oct 2006 14:54:09 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Fri, 20 Oct 2006 14:54:09 +0000 (UTC) In-Reply-To: <cxh2344pr5ob$.1uuphognwvje6$.dlg@40tude.net> User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7,gzip(gfe),gzip(gfe) Complaints-To: groups-abuse@google.com Injection-Info: k70g2000cwa.googlegroups.com; posting-host=62.29.131.162; posting-account=HkB_tw0AAAAlWBIgGa8zqKA_DeeWc5Zt Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit