🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.ruby
13 messages
13 total messages Started by RaW Sun, 27 Jan 2008 23:18
walidacja modelu w przypadku has_and_belongs_to_many
#912
Author: RaW
Date: Sun, 27 Jan 2008 23:18
8 lines
1322 bytes
class Role < ActiveRecord::Base
  has_and_belongs_to_many :rights
end

W jaki sposób mogę wykonać 'validates_presence_of' dla 'role.rights'?

--
RaW
Re: walidacja modelu w przypadku has_and_belongs_to_many
#913
Author: Jaroslaw Zabiello
Date: Tue, 29 Jan 2008 13:14
16 lines
1323 bytes
On Sun, 27 Jan 2008 23:18:31 -0000, RaW <rafal@wrzochol.net> wrote:

> class Role < ActiveRecord::Base
>   has_and_belongs_to_many :rights
> end
>
> W jaki sposób mogę wykonać 'validates_presence_of' dla 'role.rights'?

Nie używaj HABTM, jest niezalecane. Lepiej używać has_many w połączeniu z  
:through. The Rails Way uważa, że tak jest lepiej, masz wtedy prawdziwy  
model i więcej możliwości.

-- 
Jarosław Zabiełło
http://blog.zabiello.com
irc://irc.eu.freenode.net/ruby.pl
Re: walidacja modelu w przypadku has_and_belongs_to_many
#914
Author: Piotr 'piter' Hlawski
Date: Tue, 29 Jan 2008 14:21
20 lines
1841 bytes
Jaroslaw Zabiello wrote:

> On Sun, 27 Jan 2008 23:18:31 -0000, RaW <rafal@wrzochol.net> wrote:
> 
>> class Role < ActiveRecord::Base
>>   has_and_belongs_to_many :rights
>> end
>>
>> W jaki sposób mogę wykonać 'validates_presence_of' dla 'role.rights'?
> 
> Nie używaj HABTM, jest niezalecane. Lepiej używać has_many w połączeniu z
> :through. The Rails Way uważa, że tak jest lepiej, masz wtedy prawdziwy
> model i więcej możliwości.
> 

Uważam, że do przesada. Nie zawsze prawdziwy model "po drodze" jest
potrzebny.

-- 
[ Piotr 'piter' Hlawski ( <phlawski$gmail,com> ) ( GG: 4534287 ) ]
Re: walidacja modelu w przypadku has_and_belongs_to_many
#915
Author: Paweł Kondzior
Date: Wed, 30 Jan 2008 07:32
36 lines
2438 bytes

Dnia 1/29/08 3:21 PM, Piotr 'piter' Hlawski napisał(a):
> Jaroslaw Zabiello wrote:
> 
>> On Sun, 27 Jan 2008 23:18:31 -0000, RaW <rafal@wrzochol.net> wrote:
>>
>>> class Role < ActiveRecord::Base
>>>   has_and_belongs_to_many :rights
>>> end
>>>
>>> W jaki sposób mogę wykonać 'validates_presence_of' dla 'role.rights'?
>> Nie używaj HABTM, jest niezalecane. Lepiej używać has_many w połączeniu z
>> :through. The Rails Way uważa, że tak jest lepiej, masz wtedy prawdziwy
>> model i więcej możliwości.
>>
> 
> Uważam, że do przesada. Nie zawsze prawdziwy model "po drodze" jest
> potrzebny.
> 

Ja sie pod tym podpisuje, The Rails Way is not the only one Way, czasami 
chodzi tylko o skojarzenie dwoch modeli tabela laczacal i niczym wiecej.


Teraz moze sprobuje odpowiedziec jakos na pytanie, wydaje mi sie ze 
presence_of bedzie korzystac tylko z lokalnych atrybutow, wiec musisz 
albo napisac wlasny validator albo przeciazyc "validate" i tam umiescic 
kod sprawdzajacy self.rights oraz kod dodajac komunikaty o bledzie. Lub 
uzyc validates_each :jakis_istniejacy_atrybut ktory ma byc 
odpowiedzialny za role.rights, masz tutaj przyklad z aplikacji wziety

validates_each :publish_in_all do |record, attr, value|
     record.errors.add attr, _('News must be published somewhere') 
unless self.intranet_items.any?
end
Re: walidacja modelu w przypadku has_and_belongs_to_many
#916
Author: RaW
Date: Sat, 02 Feb 2008 01:40
54 lines
3257 bytes
On Jan 30, 7:32 am, Paweł Kondzior <kondzio...@gmail.com> wrote:
> Dnia 1/29/08 3:21 PM, Piotr 'piter' Hlawski napisał(a):
>
>
>
> > Jaroslaw Zabiello wrote:
>
> >> On Sun, 27 Jan 2008 23:18:31 -0000, RaW <ra...@wrzochol.net> wrote:
>
> >>> class Role < ActiveRecord::Base
> >>>   has_and_belongs_to_many :rights
> >>> end
>
> >>> W jaki sposób mogę wykonać 'validates_presence_of' dla 'role.rights'?
> >> Nie używaj HABTM, jest niezalecane. Lepiej używać has_many w połączeniu z
> >> :through. The Rails Way uważa, że tak jest lepiej, masz wtedy prawdziwy
> >> model i więcej możliwości.
>
> > Uważam, że do przesada. Nie zawsze prawdziwy model "po drodze" jest
> > potrzebny.
>
> Ja sie pod tym podpisuje, The Rails Way is not the only one Way, czasami
> chodzi tylko o skojarzenie dwoch modeli tabela laczacal i niczym wiecej.
>
> Teraz moze sprobuje odpowiedziec jakos na pytanie, wydaje mi sie ze
> presence_of bedzie korzystac tylko z lokalnych atrybutow, wiec musisz
> albo napisac wlasny validator albo przeciazyc "validate" i tam umiescic
> kod sprawdzajacy self.rights oraz kod dodajac komunikaty o bledzie. Lub
> uzyc validates_each :jakis_istniejacy_atrybut ktory ma byc
> odpowiedzialny za role.rights, masz tutaj przyklad z aplikacji wziety
>
> validates_each :publish_in_all do |record, attr, value|
>      record.errors.add attr, _('News must be published somewhere')
> unless self.intranet_items.any?
> end

Dzięki bardzo za zainteresowanie.
Nie mam jeszcze dużego doświadczenia w Raisach ale również wydaje mi
się, że tworzenie modelu tylko na potrzeby walidacji nie jest
konieczne.
Ostatecznie dzieki Waszej pomocy wyklepałem następujący kod:

  validate :must_have_rights

  def must_have_rights
    errors.add_to_base("Role must have at least one Right to be
created") unless self.rights.any?
  end

i wszystko działa jak należy.

Pozdrawiam
--
RaW
Re: walidacja modelu w przypadku has_and_belongs_to_many
#917
Author: Jaroslaw Zabiello
Date: Tue, 05 Feb 2008 04:13
28 lines
2310 bytes
On Wed, 30 Jan 2008 07:32:49 -0000, Paweł Kondzior <kondzior.p@gmail.com>  
wrote:

>>  Uważam, że do przesada. Nie zawsze prawdziwy model "po drodze" jest
>> potrzebny.
>
> Ja sie pod tym podpisuje, The Rails Way is not the only one Way, czasami  
> chodzi tylko o skojarzenie dwoch modeli tabela laczacal i niczym wiecej.

Niestety, ale nie macie racji. To nie tylko osobiste zdanie autora książki  
The Rails Way. To jest oficjalne stanowisko wyrażone w dokumentacji do RoR  
(http://api.rubyonrails.com/classes/ActiveRecord/Associations/ClassMethods.html).  
Makro habtm jest oznaczone oficjalnie jako *DEPRECIATED* i dokumentacja  
RoR SILNIE ZALECA używanie prawdziwych tabel łączących a nie tego  
sztucznego tworu bez modelu, klucza głównego i bez możliwości  
wykorzystania dodatkowym kolumn w tabeli. Cytat:

"Deprecated: Any additional fields added to the join table will be placed  
as attributes when pulling records out through has_and_belongs_to_many  
associations. Records returned from join tables with additional attributes  
will be marked as ReadOnly (because we can‘t save changes to the  
additional attributes). It‘s strongly recommended that you upgrade any  
associations with attributes to a real join model (see introduction)."

-- 
Jarosław Zabiełło
http://blog.zabiello.com
irc://irc.eu.freenode.net/ruby.pl
Re: walidacja modelu w przypadku has_and_belongs_to_many
#918
Author: Piotr 'piter' Hlawski
Date: Tue, 05 Feb 2008 08:37
42 lines
3373 bytes
Jaroslaw Zabiello wrote:

> On Wed, 30 Jan 2008 07:32:49 -0000, Paweł Kondzior <kondzior.p@gmail.com>
> wrote:
> 
>>>  Uważam, że do przesada. Nie zawsze prawdziwy model "po drodze" jest
>>> potrzebny.
>>
>> Ja sie pod tym podpisuje, The Rails Way is not the only one Way, czasami
>> chodzi tylko o skojarzenie dwoch modeli tabela laczacal i niczym wiecej.
> 
> Niestety, ale nie macie racji. To nie tylko osobiste zdanie autora książki
> The Rails Way. To jest oficjalne stanowisko wyrażone w dokumentacji do RoR
>
(http://api.rubyonrails.com/classes/ActiveRecord/Associations/ClassMethods.html).
> Makro habtm jest oznaczone oficjalnie jako *DEPRECIATED* i dokumentacja
> RoR SILNIE ZALECA używanie prawdziwych tabel łączących a nie tego
> sztucznego tworu bez modelu, klucza głównego i bez możliwości
> wykorzystania dodatkowym kolumn w tabeli. Cytat:
> 
> "Deprecated: Any additional fields added to the join table will be placed
> as attributes when pulling records out through has_and_belongs_to_many
> associations. Records returned from join tables with additional attributes
> will be marked as ReadOnly (because we can?t save changes to the
> additional attributes). It?s strongly recommended that you upgrade any
> associations with attributes to a real join model (see introduction)."
> 

Moim zdaniem źle to interpretujesz. Deprecation tyczy się tylko przypadków
kiedy chciałbyś wyposażyć tabelę łączącą w dodatkowe atrybuty. Wtedy
oczywiście tworzysz nowy model z tradycyjnym has_many/belongs_to/:through

W przypadku gdy tabela łącząca jest tylko i wyłącznie tabelą łączącą, a więc
posiada model1_id i model2_id to po co mi ona jako fizyczny model? Taka
tabela łącząca jest normalnym rozwiązaniem w projektach bazodanowych w
przypadku relacji wiele-do-wielu w procesie normalizacji i nie ma prawa być
nagle deprecated, bo tak sobie zażyczyli projektanci RoR. Dajmy spokój
takim sądom, nie uwierzę w to.


-- 
[ Piotr 'piter' Hlawski ( <phlawski$gmail,com> ) ( GG: 4534287 ) ]
Re: walidacja modelu w przypadku has_and_belongs_to_many
#919
Author: Jaroslaw Zabiello
Date: Tue, 05 Feb 2008 11:24
15 lines
1674 bytes
On Tue, 05 Feb 2008 08:37:41 -0000, Piotr 'piter' Hlawski  
<phlawski@cut_this_crap.gmail.com> wrote:

> W przypadku gdy tabela łącząca jest tylko i wyłącznie tabelą łączącą, a  
> więc posiada model1_id i model2_id to po co mi ona jako fizyczny model?

Choćby po to abyś miał dostęp do pełnych joinów (w habtm nie można użyć  
:include), albo aby ominąć push_with_attributes. Poza tym taka tabela w  
wypadku habtm *nie może* mieć pk (sic!) i jest po prostu tworem sztucznym.  
Ma też mniejsze możliwości i koszmarnie długą nazwę makra ;)

-- 
Jarosław Zabiełło
http://blog.zabiello.com
irc://irc.eu.freenode.net/ruby.pl
Re: walidacja modelu w przypadku has_and_belongs_to_many
#920
Author: Piotr 'piter' Hlawski
Date: Tue, 05 Feb 2008 11:36
26 lines
2346 bytes
Jaroslaw Zabiello wrote:

> On Tue, 05 Feb 2008 08:37:41 -0000, Piotr 'piter' Hlawski
> <phlawski@cut_this_crap.gmail.com> wrote:
> 
>> W przypadku gdy tabela łącząca jest tylko i wyłącznie tabelą łączącą, a
>> więc posiada model1_id i model2_id to po co mi ona jako fizyczny model?
> 
> Choćby po to abyś miał dostęp do pełnych joinów (w habtm nie można użyć
> :include), albo aby ominąć push_with_attributes.

Czasem to jest kompletnie niepotrzebne.

> Poza tym taka tabela w 
> wypadku habtm *nie może* mieć pk (sic!) i jest po prostu tworem sztucznym.

Tworem sztucznym z jakiego punktu widzenia? Bo z punktu widzenia DB jak
najbardziej naturalnym, co wynika z normalizacji (3NF)

> Ma też mniejsze możliwości i koszmarnie długą nazwę makra ;)

Są przypadki w których te możliwości są zbędne. Nazwa mi kompletnie nie
przeszkadza :)

-- 
[ Piotr 'piter' Hlawski ( <phlawski$gmail,com> ) ( GG: 4534287 ) ]
Re: walidacja modelu w przypadku has_and_belongs_to_many
#921
Author: piotr.solnica
Date: Fri, 08 Feb 2008 22:21
39 lines
3423 bytes
On Feb 5, 9:37 am, Piotr 'piter' Hlawski
<phlawski@cut_this_crap.gmail.com> wrote:
> Jaroslaw Zabiello wrote:
> > On Wed, 30 Jan 2008 07:32:49 -0000, Paweł Kondzior <kondzio...@gmail.com>
> > wrote:
>
> >>>  Uważam, że do przesada. Nie zawsze prawdziwy model "po drodze" jest
> >>> potrzebny.
>
> >> Ja sie pod tym podpisuje, The Rails Way is not the only one Way, czasami
> >> chodzi tylko o skojarzenie dwoch modeli tabela laczacal i niczym wiecej.
>
> > Niestety, ale nie macie racji. To nie tylko osobiste zdanie autora książki
> > The Rails Way. To jest oficjalne stanowisko wyrażone w dokumentacji do RoR
>
> (http://api.rubyonrails.com/classes/ActiveRecord/Associations/ClassMet...).
>
> > Makro habtm jest oznaczone oficjalnie jako *DEPRECIATED* i dokumentacja
> > RoR SILNIE ZALECA używanie prawdziwych tabel łączących a nie tego
> > sztucznego tworu bez modelu, klucza głównego i bez możliwości
> > wykorzystania dodatkowym kolumn w tabeli. Cytat:
>
> > "Deprecated: Any additional fields added to the join table will be placed
> > as attributes when pulling records out through has_and_belongs_to_many
> > associations. Records returned from join tables with additional attributes
> > will be marked as ReadOnly (because we can?t save changes to the
> > additional attributes). It?s strongly recommended that you upgrade any
> > associations with attributes to a real join model (see introduction)."
>
> Moim zdaniem źle to interpretujesz. Deprecation tyczy się tylko przypadków
> kiedy chciałbyś wyposażyć tabelę łączącą w dodatkowe atrybuty. Wtedy
> oczywiście tworzysz nowy model z tradycyjnym has_many/belongs_to/:through

Mniejsza o interpretacje, HABTM wyleci pewnie z Railsow z jednej
prostej przyczyny - nie jest RESTowy. Wniosek prosty, lepiej tego nie
uzywac.

Pozdrawiam,
solnic
Re: walidacja modelu w przypadku has_and_belongs_to_many
#922
Author: Przemysław Kowalczyk
Date: Sat, 09 Feb 2008 07:35
14 lines
1509 bytes
On Fri, 08 Feb 2008 23:21:34 +0100, piotr.solnica@gmail.com  
<piotr.solnica@gmail.com> wrote:
>
> Mniejsza o interpretacje, HABTM wyleci pewnie z Railsow z jednej
> prostej przyczyny - nie jest RESTowy. Wniosek prosty, lepiej tego nie
> uzywac.

nawet jak wyleci, to bedzie napewno plugin acts_as_habtm :)

pzdr
	szeryf

-- 
Przemysław ,,Szeryf'' Kowalczyk :: http://szeryf.wordpress.com/
Re: walidacja modelu w przypadku has_and_belongs_to_many
#923
Author: piotr.solnica
Date: Sat, 09 Feb 2008 14:16
20 lines
2358 bytes
On Feb 9, 8:35 am, Przemysław Kowalczyk <some...@microsoft.com> wrote:
> On Fri, 08 Feb 2008 23:21:34 +0100, piotr.soln...@gmail.com
>
> <piotr.soln...@gmail.com> wrote:
>
> > Mniejsza o interpretacje, HABTM wyleci pewnie z Railsow z jednej
> > prostej przyczyny - nie jest RESTowy. Wniosek prosty, lepiej tego nie
> > uzywac.
>
> nawet jak wyleci, to bedzie napewno plugin acts_as_habtm :)

Pewnie tak heh...a skoro juz o tym mowa, to osobiscie zgadzam sie z
pogladem, ze habtm nie jest zbyt dobrym wyjsciem, na poczatku moze sie
wydawac prostym i wygodnym rozwiazaniem, ale z czasem moga wystapic
komplikacje zycia, poniewaz nie istnieje model reprezentujacy
powiazanie, takze kiedy chcesz usunac powiazanie, to co usuwasz? Ten
problem stanie sie znaczacy zwlaszcza kiedy przyjdzie do implementacji
uprawnien w oparciu o role uzytkownikow.

solnic
Re: walidacja modelu w przypadku has_and_belongs_to_many
#925
Author: Przemysław Kowalczyk
Date: Sun, 10 Feb 2008 09:05
20 lines
2092 bytes
On Sat, 09 Feb 2008 15:16:40 +0100, piotr.solnica@gmail.com  
<piotr.solnica@gmail.com> wrote:
>
> Pewnie tak heh...a skoro juz o tym mowa, to osobiscie zgadzam sie z
> pogladem, ze habtm nie jest zbyt dobrym wyjsciem, na poczatku moze sie
> wydawac prostym i wygodnym rozwiazaniem, ale z czasem moga wystapic
> komplikacje zycia, poniewaz nie istnieje model reprezentujacy
> powiazanie, takze kiedy chcesz usunac powiazanie, to co usuwasz? Ten
> problem stanie sie znaczacy zwlaszcza kiedy przyjdzie do implementacji
> uprawnien w oparciu o role uzytkownikow.

no z tym to i ja sie zgadzam. w naszym projekcie te nieliczne habtm, ktore  
byly, szybko ewoluowaly w strone has_many :through, a w wiekszosci  
przypadkow od poczatku robilismy has_many :through.

pzdr
	szeryf

-- 
Przemysław ,,Szeryf'' Kowalczyk :: http://szeryf.wordpress.com/
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