Article View: pl.comp.lang.ruby
Article #826Re: RoR vs PHP
From: Jaroslaw Zabiello
Date: Tue, 01 Jan 2008 23:14
Date: Tue, 01 Jan 2008 23:14
73 lines
3210 bytes
3210 bytes
On Tue, 01 Jan 2008 19:45:20 -0000, Maciej Piechotka
<uzytkownik2@gmail.com> wrote:
> Można prosić dla 3 metody kod (1 tabela na klasę) w Sequelu?
class Parent < Sequel::Model(:parents)
set_schema do
primary_key :id
varchar :pole_parent
end
end
class Child1 < Sequel::Model(:childs1)
set_schema do
primary_key :parent_id
varchar :pole1
end
class << self
def next_id
self.select(:max[:parent_id].as(:last_id)).first.last_id.to_i + 1
end
end
before_save do
unless Parent.filter(:id => Child1.next_id).first
raise 'Parent cannot assign more childs1 objects'
end
end
end
Parent.create_table!
Child1.create_table!
Parent.create :pole_parent => 'Alojzy'
Child1.create :pole1 => 'Jas'
Parent.all.map{|row| p row.values}
Child1.all.map{|row| p row.values}
# => {:pole_parent=>"Alojzy", :id=>1}
# => {:pole1=>"Jas", :parent_id=>1}
Child1.create :pole1 => 'Malgosia'
# => Parent cannot assign more childs1 objects
>> Zrozumiałem, że miałeś sytuację że jest dana baza i należy jakośją
>> zamapować w Ruby.
>
> Nie. Mamy pewien model dziedziczenia (np. Person, Client, Employee) i
> mamy taką strukturę zapisać w bazie danych.
To jest bez sensu. Tzn. ma sens tylko w trywialnych przypadkach. I tylko
tyle potrafią migracje AR. Każdy nietrywialny przykład wymaga dodania
dodatkowego kodu poza samym attr_accessor. Przecież z podanego wcześniej
przez ciebie modelu dziedziczenia kompletnie NIC nie wynika. Podałeś
przecież:
class Parent
attr_accessor :pole_parent
end
class Child1 < Parent
attr_accessor :pole1
end
class Child2 < Parent
attr_accessor :pole2
end
a w tabelach jakimś cudem wyskoczyły ci dodatkowe, inne pola. To nie jest
pełny opis klas.
--
Jarosław Zabiełło
http://blog.zabiello.com
Technical Details
Message-ID:
<op.t39xi4kdr2rg33@jzmbp.local>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailReferences:
<fl6ahk$m1q$1@inews.gazeta.pl> <op.t351icnsr2rg33@jzmbp.local> <fl93bh$d8p$1@inews.gazeta.pl> <r4il45-1ar.ln1@router.piechotka.com.pl> <op.t358bkfwr2rg33@jzmbp.local> <fl9aau$9b9$5@inews.gazeta.pl> <20071231084648.6d47feda.gryf_esm-no@spam-o2.pl> <op.t37dq3ydr2rg33@jzmbp.local> <0enn45-u25.ln1@router.piechotka.com.pl> <op.t37qnpdrr2rg33@jzmbp.local> <3pbo45-ha7.ln1@router.piechotka.com.pl> <op.t3777x1jr2rg33@jzmbp.local> <jtip45-n8c.ln1@router.piechotka.com.pl> <op.t388lvhur2rg33@jzmbp.local> <h96q45-37f.ln1@router.piechotka.com.pl> <op.t39jhmarr2rg33@jzmbp.local> <grhq45-5dg.ln1@router.piechotka.com.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail From: "Jaroslaw Zabiello" <abuse@tpnet.pl> Newsgroups: pl.comp.lang.ruby Subject: Re: RoR vs PHP Date: Tue, 01 Jan 2008 23:14:53 -0000 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 73 Message-ID: <op.t39xi4kdr2rg33@jzmbp.local> References: <fl6ahk$m1q$1@inews.gazeta.pl> <op.t351icnsr2rg33@jzmbp.local> <fl93bh$d8p$1@inews.gazeta.pl> <r4il45-1ar.ln1@router.piechotka.com.pl> <op.t358bkfwr2rg33@jzmbp.local> <fl9aau$9b9$5@inews.gazeta.pl> <20071231084648.6d47feda.gryf_esm-no@spam-o2.pl> <op.t37dq3ydr2rg33@jzmbp.local> <0enn45-u25.ln1@router.piechotka.com.pl> <op.t37qnpdrr2rg33@jzmbp.local> <3pbo45-ha7.ln1@router.piechotka.com.pl> <op.t3777x1jr2rg33@jzmbp.local> <jtip45-n8c.ln1@router.piechotka.com.pl> <op.t388lvhur2rg33@jzmbp.local> <h96q45-37f.ln1@router.piechotka.com.pl> <op.t39jhmarr2rg33@jzmbp.local> <grhq45-5dg.ln1@router.piechotka.com.pl> NNTP-Posting-Host: 89.124.240.242 Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1199229297 13289 89.124.240.242 (1 Jan 2008 23:14:57 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Tue, 1 Jan 2008 23:14:57 +0000 (UTC) X-User: hipertracker User-Agent: Opera Mail/9.25 (MacIntel) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit