🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Wspolne modele dla wielu aplikacji RoR

#217
From: Marcin Mielżyński
Date: Tue, 03 Oct 2006 18:39
75 lines
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-mail
References: <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