🚀 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 zbyszek.malec Mon, 16 Feb 2009 19:48
ActiveRecord + drzewo
#1192
Author: zbyszek.malec
Date: Mon, 16 Feb 2009 19:48
45 lines
2251 bytes
Witam
Używam RoR i ActiveRecords od niedawna, więc nie mam jeszcze zbyt
dużego doświadczenia. Być może pytanie jest banalne, ale nie znalazłem
na nie odpowiedzi samodzielnie, więc pytam tutaj.

Mam taką migrację:

class CreateCategories < ActiveRecord::Migration
  def self.up
    create_table :categories do |t|
      t.string :name

      t.belongs_to :parent_category
    end
  end

  def self.down
    drop_table :categories
  end
end


i odpowiadający jej model:

class Category < ActiveRecord::Base
  belongs_to :parent_category, :class_name => 'Category'
  has_many   :subcategories, :class_name => 'Category'
end

Czyli mam drzewo kategorii, każda kategoria może mieć kategorię
nadrzędną oraz wiele kategorii podrzędnych.
Mój problem jest taki, że następujące wywołanie:

category = Category.new :name => 'cat'
subcategory = category.subcategories.build :name => 'subcat'

nie ustawia parent_category_id u podkategorii na ich rodzica. Czy da
się to osiągnąć deklaratywnie,
czy jestem zmuszony do ręcznej obsługi tej sytuacji?

Używam JRuby 1.1.4 i RoR 2.1.0.

--
Pozdrawiam
Zbyszek Malec
Re: ActiveRecord + drzewo
#1193
Author: Radosław Bułat
Date: Mon, 16 Feb 2009 22:23
14 lines
1390 bytes
zbyszek.malec@gmail.com pisze:
> category = Category.new :name => 'cat'
> subcategory = category.subcategories.build :name => 'subcat'
> 
> nie ustawia parent_category_id u podkategorii na ich rodzica. Czy da
> się to osiągnąć deklaratywnie,
> czy jestem zmuszony do ręcznej obsługi tej sytuacji?

Czy robisz w ogóle .save? Bo po zapisie powinny być ustawione poprawnie 
idki (ew. potrzebny jest reload obiektów).

-- 
Radosław Bułat
http://radarek.jogger.pl - mój blog
Re: ActiveRecord + drzewo
#1195
Author: Wojciech Piekutowski
Date: Tue, 17 Feb 2009 12:45
19 lines
1984 bytes
Hej,

Jak wspomniał już Radosław, żeby parent_category_id ustawiło się,
rodzic musi być wcześniej zapisany do bazy. Z drugiej strony jeśli nie
jest zapisany to nie ma czym się przejmować, bo przy zapisie
któregokolwiek z nich i tak oba zostaną zapisane, a parent_category_id
w subcategory ustawione przez AR.

Jednak twoja definicja klasy Category jest nie do końca ok. Musisz
powiedziec jakiej kolumny ma użyć has_many, ponieważ domyślnie jest to
'category_id'.
class Category < ActiveRecord::Base
  belongs_to :parent_category, :class_name => 'Category'
  has_many   :subcategories, :class_name => 'Category', :foreign_key
=> 'parent_category_id'
end

Pozdrawiam,
Wojciech Piekutowski
Re: ActiveRecord + drzewo
#1194
Author: Zbyszek Malec
Date: Tue, 17 Feb 2009 17:59
10 lines
1091 bytes
Dnia Mon, 16 Feb 2009 23:23:08 +0100, Radosław Bułat napisał(a):

> Czy robisz w ogóle .save? Bo po zapisie powinny być ustawione poprawnie 
> idki (ew. potrzebny jest reload obiektów).

Robię save, po zbudowaniu całego drzewa kategorii.

-- 
Zbyszek Malec
gg 2756100
Re: ActiveRecord + drzewo
#1197
Author: Zbyszek Malec
Date: Tue, 17 Feb 2009 18:11
17 lines
1411 bytes
Dnia Tue, 17 Feb 2009 04:45:11 -0800 (PST), Wojciech Piekutowski
napisał(a):

> Jednak twoja definicja klasy Category jest nie do końca ok. Musisz
> powiedziec jakiej kolumny ma użyć has_many, ponieważ domyślnie jest to
> 'category_id'.
> class Category < ActiveRecord::Base
>   belongs_to :parent_category, :class_name => 'Category'
>   has_many   :subcategories, :class_name => 'Category', :foreign_key
> => 'parent_category_id'
> end

Rzeczywiście, przyczyną był błąd w definicji kategorii. Dzięki za pomoc.

-- 
Zbyszek Malec
gg 2756100
Re: ActiveRecord + drzewo
#1196
Author: Maciej Biłas
Date: Wed, 18 Feb 2009 09:33
18 lines
2099 bytes
On Feb 17, 7:11 pm, Zbyszek Malec <zbysze...@tlen.pl> wrote:
> Dnia Tue, 17 Feb 2009 04:45:11 -0800 (PST), Wojciech Piekutowski
> napisał(a):
>
> > Jednak twoja definicja klasy Category jest nie do końca ok. Musisz
> > powiedziec jakiej kolumny ma użyć has_many, ponieważ domyślnie jest to
> > 'category_id'.
> > class Category < ActiveRecord::Base
> >   belongs_to :parent_category, :class_name => 'Category'
> >   has_many   :subcategories, :class_name => 'Category', :foreign_key
> > => 'parent_category_id'
> > end
>
> Rzeczywiście, przyczyną był błąd w definicji kategorii. Dzięki za pomoc.

A w ogóle czy nie lepiej skorzystać tutaj z acts_as_nested_set?

m.
Re: ActiveRecord + drzewo
#1198
Author: Zbyszek Malec
Date: Thu, 19 Feb 2009 20:16
14 lines
1490 bytes
Dnia Wed, 18 Feb 2009 01:33:45 -0800 (PST), Maciej Biłas napisał(a):

> A w ogóle czy nie lepiej skorzystać tutaj z acts_as_nested_set?

Ha, to jest właśnie to czego potrzebowałem.
Próbowałem to znaleźć ręcznie w dokumentacji i nie udało mi się znaleźć
odpowiedniego linka (dopiero google mi pomogły). Korzystam z
api.rubyonrails.org i tam w tym lewym okienku nie ma śladu po
acts_as_nested_set czy Acts::As. Czy ja źle szukam czy może tam trzeba mieć
+2 do odkrywania?

-- 
Zbyszek Malec
gg 2756100
Re: ActiveRecord + drzewo
#1199
Author: Daniel Podlejski
Date: Thu, 19 Feb 2009 20:52
17 lines
1742 bytes
Zbyszek Malec napisał:

>  Próbowałem to znaleźć ręcznie w dokumentacji i nie udało mi się znaleźć
>  odpowiedniego linka (dopiero google mi pomogły). Korzystam z
>  api.rubyonrails.org i tam w tym lewym okienku nie ma śladu po
>  acts_as_nested_set czy Acts::As. Czy ja źle szukam czy może tam trzeba mieć
>  +2 do odkrywania?

Bo to wyleciało z "core" jakiś czas temu, a na api.rubyonrails.org jest
pewnie tylko dokumentacja do aktualnej wersji Rails.

Dlatego wolę http://apidock.com/ - jest dokumentacja do wersji
historycznych, na dodatek z dobrą wyszukiwarką, w przyjemniejszej
dla oka formie, i z możliwością komentowania.

-- 
Daniel Podlejski
Re: ActiveRecord + drzewo
#1200
Author: Maciej Biłas
Date: Fri, 20 Feb 2009 10:05
16 lines
2060 bytes
On Feb 19, 9:52 pm, Daniel Podlejski <under...@underley.eu.org> wrote:
> Zbyszek Malec napisał:
> >  Czy ja źle szukam czy może tam trzeba mieć
> >  +2 do odkrywania?
>
> Bo to wyleciało z "core" jakiś czas temu, a na api.rubyonrails.org jest
> pewnie tylko dokumentacja do aktualnej wersji Rails.
>
> Dlatego wolęhttp://apidock.com/- jest dokumentacja do wersji
> historycznych, na dodatek z dobrą wyszukiwarką, w przyjemniejszej
> dla oka formie, i z możliwością komentowania.

Wyleciało dokładnie wraz z RoRem 2.0 (wraz z paginacją, in_place_edit
i innymi...)

m.
Re: ActiveRecord + drzewo
#1201
Author: Wojtek Piekutowski
Date: Fri, 20 Feb 2009 10:29
25 lines
2401 bytes
On Feb 18, 10:33 am, Maciej Biłas <mac...@inszy.org> wrote:
> On Feb 17, 7:11 pm, Zbyszek Malec <zbysze...@tlen.pl> wrote:
>
> > Dnia Tue, 17 Feb 2009 04:45:11 -0800 (PST), Wojciech Piekutowski
> > napisał(a):
>
> > > Jednak twoja definicja klasy Category jest nie do końca ok. Musisz
> > > powiedziec jakiej kolumny ma użyć has_many, ponieważ domyślnie jest to
> > > 'category_id'.
> > > class Category < ActiveRecord::Base
> > >   belongs_to :parent_category, :class_name => 'Category'
> > >   has_many   :subcategories, :class_name => 'Category', :foreign_key
> > > => 'parent_category_id'
> > > end
>
> > Rzeczywiście, przyczyną był błąd w definicji kategorii. Dzięki za pomoc.
>
> A w ogóle czy nie lepiej skorzystać tutaj z acts_as_nested_set?
>
> m.

acts_as_tree będzie bardziej pasować do tego przypadku.

Pozdrawiam,
Wojciech Piekutowski
Re: ActiveRecord + drzewo
#1202
Author: Przemysław Kowalczyk
Date: Fri, 20 Feb 2009 18:14
28 lines
2052 bytes
On Fri, 20 Feb 2009 11:29:57 +0100, Wojtek Piekutowski  
<w.piekutowski@gmail.com> wrote:
>>
>> > > Jednak twoja definicja klasy Category jest nie do końca ok. Musisz
>> > > powiedziec jakiej kolumny ma użyć has_many, ponieważ domyślnie jest  
>> to
>> > > 'category_id'.
>> > > class Category < ActiveRecord::Base
>> > >   belongs_to :parent_category, :class_name => 'Category'
>> > >   has_many   :subcategories, :class_name => 'Category', :foreign_key
>> > > => 'parent_category_id'
>> > > end
>>
>> > Rzeczywiście, przyczyną był błąd w definicji kategorii. Dzięki za  
>> pomoc.
>>
>> A w ogóle czy nie lepiej skorzystać tutaj z acts_as_nested_set?
>
> acts_as_tree będzie bardziej pasować do tego przypadku.

acts_as_nested_set to wlasnie implementacja drzewa. ktory bedzie lepszy,  
zalezy od tego, jakie operacje beda wykonywane najczesciej na tym drzewie.

pzdr
	szeryf

-- 
Przemysław ,,Szeryf'' Kowalczyk :: http://szeryf.wordpress.com/
Re: ActiveRecord + drzewo
#1204
Author: Radosław Bułat
Date: Fri, 20 Feb 2009 18:42
13 lines
1600 bytes
Przemysław Kowalczyk pisze:
> 
> acts_as_nested_set to wlasnie implementacja drzewa. ktory bedzie lepszy, 
> zalezy od tego, jakie operacje beda wykonywane najczesciej na tym drzewie.
> 

Jeszcze coś mi świta w głowie coś takiego jak better_nested_set i 
awesome_nested_set :). Nazwy mają sugerować lepszą implementację, kolega 
może sprawdzić jak jest w rzeczywistości.

-- 
Radosław Bułat
http://radarek.jogger.pl - mój blog
Re: ActiveRecord + drzewo
#1203
Author: Zbyszek Malec
Date: Wed, 25 Feb 2009 22:46
12 lines
1552 bytes
Dnia Fri, 20 Feb 2009 19:42:35 +0100, Radosław Bułat napisał(a):

> Jeszcze coś mi świta w głowie coś takiego jak better_nested_set i 
> awesome_nested_set :). Nazwy mają sugerować lepszą implementację, kolega 
> może sprawdzić jak jest w rzeczywistości.

Ostatecznie użyłem awesome_nested_set, który to jest poprawioną wersją
better_nested_set, który to jest poprawioną wersją acts_as_nested_set :]

-- 
Zbyszek Malec
gg 2756100
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