łączenie obiektów

Witajcie
mam pytanie- w jaki sposób połączyć 2 obiekty?
załóżmy, że mam

@user = User.first @student = Student.first
chciałbym otrzymać w wyniku:

@current_user = @user + @student

to oczywiście nie zadziała, natomiast pokazuje ideowo, co chciałbym osiągnąc
Z góry dzięki za wszelką pomoc

hmm
właśnie tak średnio pokazuje :smiley: (przynajmniej dla mnie)
co chcesz później robić z tym obiektem?

tam średnio,… całkiem nie wiadomo o co chodzi ^^ … wszystko zalezy od tego co masz na mysli piszac polaczyc oba obiekty ?? Jedyne co przychodzi mi do glowy to ze chcesz osiagnac dodanie ich roznych atrybutow. Jesli tak:
Musisz przeciazyc operator dodawania w klasie User zeby nadawal wartosci sumy odpowiednich argumentow obu klas, najprosciej przez zsumowanie atrybutow ktore chcesz zsumowac z tablicy haszy attributes. A czego sumowac nie chcesz niech wstawia z self … Choc szczerze powiedziawszy ciekawi mnie co ty masz tu na mysli XD

hmm, gdy pisałem tamtego posta, wydawało mi się, że będzie wiadomo o co chodzi :slight_smile:
Ale tak, chodzi o to, że dwa obiekty mają różne atrybuty. Chciałbym otrzymać trzeci obiekt, mający wszystkie atrybuty pierwszego + “nowe” (te, które nie istnieją w pierwszym) atrybuty drugiego.

Czyli tak naprawdę chcesz zmergować atrybuty:

@user.attributes.merge!(@student.attributes)

Jak to zrobić żeby było wykonywane tylko dla atrybutów, których nie ma w @user – to ćwiczenie dla czytelnika :wink: Dodam dla ułatwienia, że można to zrobić w jednej linijce z blokiem :slight_smile:

hmm, dziwne, w irbie działa, w aplikacji średnio:

@user = Teacher.find(:first,:conditions=>['user_id = ?',@current_user.id]) @current_user = current_user_session && current_user_session.record logger.debug('============ Debug: =======') logger.debug(@current_user.class) logger.debug(@user.class) return @current_user.attributes.merge!(@user.attributes) #return @current_user.attributes.merge!(@user)
w konsoli debug zwraca mi:

============ Debug: ======= User Student
a błąd to:

gdy działa pierwszy return, gdy go zakomentuję i odkomentuję drugi, otrzymuję:

can't convert Student into Hash

jakieś wskazówki?:slight_smile:

[quote=krzyzak]Witajcie
mam pytanie- w jaki sposób połączyć 2 obiekty?
chciałbym otrzymać w wyniku:

@current_user = @user + @student

[/quote]
Są dwa mechanizmy, których możesz użyć.

Delegacja:

User.has_one :student # ew. lepsze określenie związanego entity wraz z polymorphic => true User.delegates :name, :surname, :address, :to => :student
Drugie rozwiązanie to composed_of:

Student.composed_of :user # tu musisz się wspomóc dokumentacją

O rozwiązaniu z composed_of wiem, że istnieje. W naszych projektach delegacja wystarczała.