[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

rails has_and_belongs_to_many problem

Igor Anic

5/4/2005 9:51:00 AM

I have two classes Album and Korisnik (think about that as user),
they are connected with album_korisnik table (I have pluralization
turned off).

Her is the declaration:

class Album < ActiveRecord::Base
...
has_and_belongs_to_many :prijatelji, :class_name => 'Korisnik'
...

class Korisnik < ActiveRecord::Base
...
has_and_belongs_to_many :albumi_prijatelja, :class_name => 'Album'
...


I'm trying to add new korisnik to the album, and this is not working:
prijatelji << k
but this line is working ok
k.albumi_prijatelja << self

In the first case i don't get any error in the log, and don't get any
sql commands in transaction.

What I'm doing wrong?

Thanks,
Igor

2 Answers

threeve.org

5/4/2005 12:36:00 PM

0

On 5/4/05, Igor Anic <ianic@4dva.hr> wrote:
> I have two classes Album and Korisnik (think about that as user),
> they are connected with album_korisnik table (I have pluralization
> turned off).
>
> Her is the declaration:
>
> class Album < ActiveRecord::Base
> ...
> has_and_belongs_to_many :prijatelji, :class_name => 'Korisnik'
> ...
>
> class Korisnik < ActiveRecord::Base
> ...
> has_and_belongs_to_many :albumi_prijatelja, :class_name => 'Album'
> ...
>
> I'm trying to add new korisnik to the album, and this is not working:
> prijatelji << k
> but this line is working ok
> k.albumi_prijatelja << self
>
> In the first case i don't get any error in the log, and don't get any
> sql commands in transaction.
>
> What I'm doing wrong?
>
> Thanks,
> Igor
>
>


This should work:
a = Album.find(1) # find an album
k = Korisnik.find(1) # find a Korisnik
a.prijatelji << k # add the Korisnik to the album

Converserly:
a = Album.find(1) # find an album
k = Korisnik.find(1) # find a Korisnik
k.albumi_prijatelja << a # add the album to the Korisnik


Either way should add to the many-many association.

I assume you are using "k.albumi_prijatelja << self" from inside a
method of the Album class? which is why it might work. If that is
the case, then your first example isn't working because I think it
would need to be "self.prijatelji << k" not just "prijatelji << k".
If you are trying to do this within a controller method, then use the
examples I provided.

HTH,

Jason



Igor Anic

5/4/2005 1:14:00 PM

0

Sorry,
it was my mistake (as usual).
Both ways are working now.

korisnik_id was an autoincrement field in the database !!!
is it strange that I didn't get failed update statement?

Thank you Jason and sorry for the stupid question.


Jason Foreman wrote:
> On 5/4/05, Igor Anic <ianic@4dva.hr> wrote:
>
>>I have two classes Album and Korisnik (think about that as user),
>>they are connected with album_korisnik table (I have pluralization
>>turned off).
>>
>>Her is the declaration:
>>
>>class Album < ActiveRecord::Base
>> ...
>> has_and_belongs_to_many :prijatelji, :class_name => 'Korisnik'
>> ...
>>
>>class Korisnik < ActiveRecord::Base
>> ...
>> has_and_belongs_to_many :albumi_prijatelja, :class_name => 'Album'
>> ...
>>
>>I'm trying to add new korisnik to the album, and this is not working:
>>prijatelji << k
>>but this line is working ok
>>k.albumi_prijatelja << self
>>
>>In the first case i don't get any error in the log, and don't get any
>>sql commands in transaction.
>>
>>What I'm doing wrong?
>>
>>Thanks,
>>Igor
>>
>>
>
>
>
> This should work:
> a = Album.find(1) # find an album
> k = Korisnik.find(1) # find a Korisnik
> a.prijatelji << k # add the Korisnik to the album
>
> Converserly:
> a = Album.find(1) # find an album
> k = Korisnik.find(1) # find a Korisnik
> k.albumi_prijatelja << a # add the album to the Korisnik
>
>
> Either way should add to the many-many association.
>
> I assume you are using "k.albumi_prijatelja << self" from inside a
> method of the Album class? which is why it might work. If that is
> the case, then your first example isn't working because I think it
> would need to be "self.prijatelji << k" not just "prijatelji << k".
> If you are trying to do this within a controller method, then use the
> examples I provided.
>
> HTH,
>
> Jason
>
>
>