Article View: pl.comp.lang.ruby
Article #217Re: Wspolne modele dla wielu aplikacji RoR
From: Marcin Mielżyński
Date: Tue, 03 Oct 2006 18:39
Date: Tue, 03 Oct 2006 18:39
75 lines
2894 bytes
2894 bytes
Jaroslaw Zabiello wrote:
> Chce miec wspolne definicje modeli dla wielu aplikacji RoR. W tym celu,
> wszystkie model definiuje w zewnetrznym module i domieszkuje odpowiednie
> klasy.
>
> Np. /projekt1/app/models/destination.rb zawiera przykladowo:
>
> require $SHARED + 'destination_module.rb'
> class Destination < ActiveRecord::Base
> set_primary_key "Destination_ID"
> set_table_name "refdestinations"
> extend DestinationModule
> end
>
tu musisz rozróżnić aby mieć reloadable w trybie development: - możliwe
że railsy mają swój odpowiednik
if RAILS_ENV == "development"
load File.dirname(__FILE__) + "/destination_module.rb"
RAILS_DEFAULT_LOGGER.info "przeładowano..."
else
require "destination_module"
end
class Ble < ActiveRecord::Base
extend DestinationModule
end
> Zas /shared/destination_model.rb zawiera
> I to dziala. Jednakze nie podoba mi sie, ze nie moge do modulu wyniesc
> metod ustawiajacych nazwe tabeli i primary key. Chcialbym aby mozna bylo to
> wszystko zgromadzic w 1 miejscu:
>
> module DestinationModule
> set_primary_key "Destination_ID"
> set_table_name "refdestinations"
> def jakas_medoda
> #...
> end
> end
>
Nie zadziała ponieważ set_... musisz zawołać w kontekście klasy
receivera odocelowej. Prędzej tak:
module DestinationModule
def self.extended c
c.set_table_name "refdestinations"
lub jeśli metoda nie jest publiczna:
c.instance_eval do
set_table_name "refdestinations"
end
end
end
Trzeba też zaznaczyć że Railsy robią globa na katalog app/ i
kategoryzują klasy po ich rodzicach. Nie interesują się z żadnym razie
nazwami katalogów models, controllers itd... Wrzuć jakiś model do
katalogu controllers - też będzie działać - dlatego też taki moduł w
powietrzu nie przeszkadza. W 1.2 ma się to zmienić za sprawą autoload magic.
lopex
Technical Details
Message-ID:
<efuape$90g$1@news.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mailReferences:
<1arq4shj20yza$.10iqu9n63t78t$.dlg@40tude.net>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mail From: Marcin Mielżyński <lopx@gazeta.pl> Newsgroups: pl.comp.lang.ruby Subject: Re: Wspolne modele dla wielu aplikacji RoR Date: Tue, 03 Oct 2006 20:39:36 +0200 Organization: Onet.pl Lines: 75 Message-ID: <efuape$90g$1@news.onet.pl> References: <1arq4shj20yza$.10iqu9n63t78t$.dlg@40tude.net> NNTP-Posting-Host: chello087207016023.chello.pl Mime-Version: 1.0 X-Trace: news.onet.pl 1159900782 9232 87.207.16.23 (3 Oct 2006 18:39:42 GMT) X-Complaints-To: usenet@news.onet.pl NNTP-Posting-Date: Tue, 3 Oct 2006 18:39:42 +0000 (UTC) X-Sender: 5Da2qcG7AWj7WISFX859Php/OS6q4VnB In-Reply-To: <1arq4shj20yza$.10iqu9n63t78t$.dlg@40tude.net> User-Agent: Thunderbird 1.5.0.7 (Windows/20060909) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit