Cannot get fixtures working (with has_and_belongs_to_many)


#1

Hello,

I have the following scenario:
class User; has_and_belongs_to_many :roles; end
class Role; has_and_belongs_to_many :users; end
#roles schema only has name (string) as attribute
an additional table ‘roles_users’ with user_id (integer) and role_id
(integer) was necessary.
Then I created a fixture in users.yml:
admin:
roles: admin, guest
and in roles.yml:
guest:
name: guest
admin:
name: admin

This should work as mentioned in the docs:
http://api.rubyonrails.org/classes/Fixtures.html
But the following line did not pass:
assert_not_nil users(:admin).roles.find_by_name(‘admin’)
Because users(:admin).roles is empty!

For the problem I crawled a lot of docs but I cannot see where I made
a mistake.
Could someone lead me in the right direction?

Regards,
Peter.


#2

Hmmh,

even after cleaning up the roles_users (without timestamp) it does not
work (Hint from [1])
Tried out different order of fixture importing -> nothing helps.

So, I switched to the old way to define fixtures [2] and it works :slight_smile:

Regards,
Peter.

[1]
http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/ea4de9d194fefc2d/62cd3b8f365eba8b
[2]
http://railsforum.com/viewtopic.php?id=50


#3

On Nov 23, 2008, at 5:22 PM, Peter wrote:

Peter.

[1]
http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/ea4de9d194fefc2d/62cd3b8f365eba8b
[2]
http://railsforum.com/viewtopic.php?id=50

This is the only message I’ve looked at, but can you turn the join
table’s fixture into an ordered map:

— !omap

  • first:
    id: “1”
    role_id: “1”
    user_id: “1”
  • second:
    id: “2”
    role_id: “1”
    user_id: “2”

-Rob

Rob B. http://agileconsultingllc.com
removed_email_address@domain.invalid


#4

Thanks for the answer Rob!
The intention was to avoid the the explicit definition of a join table
in the fixtures,
like it is possible since some months. See 'Let‘s make the HABTM
fixture go away. ’ in
http://api.rubyonrails.org/classes/Fixtures.html

For your approach: I will put the omap into a roles_users.yml file,
right?

Regards,
Peter.

On Nov 23, 11:46 pm, Rob B. removed_email_address@domain.invalid


#5

On Nov 26, 2008, at 2:56 AM, Peter wrote:

Thanks for the answer Rob!
The intention was to avoid the the explicit definition of a join table
in the fixtures,
like it is possible since some months. See 'Let‘s make the HABTM
fixture go away. ’ in
http://api.rubyonrails.org/classes/Fixtures.html

Hadn’t seen that. (But I haven’t used a HABTM association in a while
either.)

For your approach: I will put the omap into a roles_users.yml file,
right?

Regards,
Peter.

Yes, that’s right. I noticed that the “YAML Fixtures” section of that
page you referenced describes the omap type also.

-Rob