🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.ruby
Article #247

Re: Czy ActiveRecord jest logiczny?

#247
From: simon
Date: Fri, 20 Oct 2006 14:54
67 lines
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-mail
References: <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