Accessing correct ID

Been playing with RoR for a few weeks, got quite far, but having a
stupid moment, and a morning of googling isn’t getting me anywhere

in my controller, amongst others I have

@car_owners = CarOwner.find(:all, :joins => [“LEFT JOIN users ON
users.id = user_id”], :conditions => [“car_ID = ?”, @car.id])

in the related view I have

<% for owner in @car_owners %>

… snip …

<%= link_to ‘show’, :controller =>‘newowner’, :action => ‘show’, :id =>
owner.id %>

<% end %>

The problem is the owner.id is actually giving me the users.id as in
the left join in the controller

How do I access the actual car_owners.id , I’ve tried various things,
but nothing is giving me the right id

thanks in advance for any help

evamedia wrote:

<% for owner in @car_owners %>

How do I access the actual car_owners.id , I’ve tried various things,
but nothing is giving me the right id

thanks in advance for any help

You could try adding

:select => “car_owners.id as car_owner_id”

And then saying link_to … :id => owner.car_owner_id

It sounds like you should be using belongs_to, as in

@car_owners = CarOwner.find(:all, :include => :user, :conditions =>
[“car_ID = ?”, @car.id])

Just guessing…

Hope this helps (not to mention works :] )…

Cheery-o
Gustav P.
[email protected]

You need to set up your classes:

Car
has_one :owner

Owner
belongs_to :car

Then grab car and owner info:

@cars = Car.find(:all)
@cars.collect { |car| car.owner }

You will now have a collection of all cars with owners nested beneath
each car. Use <%= debug(@cars) %> in your view to verify that this has
happened. To show in the view iterate though cars and owners:

<% for car in @cars %>
<%= car.name %> <%= link_to 'show', :controller =>'newowner', :action => 'show', :id => car.owner.id %>

Things may get a bit funky but this should get you close enough,
assuming only one owner per car. Hope this helps some!

Taylor

On Nov 15, 2006, at 4:36 PM, Taylor S. wrote:

Then grab car and owner info:

@cars = Car.find(:all)
@cars.collect { |car| car.owner }

I think this was meant to be:
@cars = Car.find(:all, :include => :owner)

which will be a reduction in database overhead by avoiding separate
queries for the owner of each car.

<%= link_to 'show', :controller =>'newowner', :action => 'show', :id => car.owner.id %>

Things may get a bit funky but this should get you close enough,
assuming only one owner per car. Hope this helps some!

Taylor

-Rob

Rob B. http://agileconsultingllc.com
[email protected]

It seems to me that owner = user? What about this schema?

Car
has_many :users, :through => :ownerships, :conditions => “ended_at IS
NULL”

User
has_many :cars, :through => :ownerships, :conditions => “ended_at IS
NULL”

Ownership
belongs_to :car
belongs_to :user

Now you can do Car(id).users[0].id to get the current owner’s id. There
is some trickery involved because you aren’t really using a join table
so you identify the current owner as the only one who has a NULL
“ended_at” ownership. (when a car is sold, ended_at is filled in)

But since Rails cannot do a has_one through a M:M table you have to
create an array. ‘:conditions => “ended_at IS NULL”’ insures that your
array only has one record, so you can reference it with ‘users[0].’
Does that make sense?

thanks for the replys, but my models are setup as

Car

has_many :car_owners

CarOwner

belongs_to :car
has_one :user

as each car could of been owned by many people, but each owner is only
one user

(hope that makes sense)

with my code, looking at the log it’s running a query "select * from
car_owners left join users on users.id = user_id where (car_id = 9)

if I run that on my DB I get all the rows (*) so how do I access
car_owners.id