Thread View: pl.comp.lang.ruby
3 messages
3 total messages
Started by Jaroslaw Zabiello
Tue, 03 Oct 2006 11:20
Wspolne modele dla wielu aplikacji RoR
Author: Jaroslaw Zabiello
Date: Tue, 03 Oct 2006 11:20
Date: Tue, 03 Oct 2006 11:20
38 lines
1657 bytes
1657 bytes
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
Zas /shared/destination_model.rb zawiera
module DestinationModule
def jakas_medoda
#...
end
end
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
Tak jednak nie dziala...
--
Jarosław Zabiełło
http://blog.zabiello.com
Re: Wspolne modele dla wielu aplikacji RoR
Author: 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
Re: Wspolne modele dla wielu aplikacji RoR
Author: Marcin Mielżyński
Date: Tue, 03 Oct 2006 18:44
Date: Tue, 03 Oct 2006 18:44
4 lines
1055 bytes
1055 bytes
albo po prostu podlinkować w systemie plików... capistrano się do tego nadaje rewelacyjnie. lopex
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads