using find to get the value from a table referenced by foreign key

Hello all,

I have 2 tables calls and clients:

clients:

Hi,

Following up more on this...

Hello all,

I have 2 tables calls and clients:

clients:
+-----------+---------+------+-----+---------+----------------+
> Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+----------------+
> id | int(11) | | PRI | NULL | auto_increment |
> ivr_id | int(11) | YES | MUL | NULL | |
> is_online | char(1) | YES | | NULL | |
+-----------+---------+------+-----+---------+----------------+

calls:
+-------------+--------------+------+-----+---------+----------------+
> Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
> id | int(11) | | PRI | NULL | auto_increment |
> src | varchar(80) | YES | | NULL | |
> start | datetime | YES | | NULL | |
> ivr_id | int(11) | YES | MUL | NULL | |
> file_name | varchar(255) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+

Here calls.ivr_id is the foreign key referring to clients.ivr_id

Corresponding models are :

class Call < ActiveRecord::Base
  belongs_to :client, :foreign_key => "ivr_id"
  def self.calls_and_is_online (from_time, to_time)
    find (:first,
          :conditions => [
            "start > :from_time and start <= :to_time
             and ivr_id <> 0
             and file_name like '%wav'",
            {:from_time => from_time, :to_time => to_time}
          ])
  end
end

class Client < ActiveRecord::Base
  has_one :call, :foreign_key => "ivr_id"
end

My call_controller has a method

  def get_calls_and_is_online
    @date = Time.parse(params[:date])
    @calls_and_is_online = Call.calls_and_is_online(@date, @date+1.day)
  end

From my controller I can get all the details of call table with out
any problems. Now I want to get the is_online status of a call. The
rails book Chap: 18 says I can define some thing like price =
line_item.product.price, but in my case when I use <%=
@calls_and_is_online.client.is_online %> from my view, I get the error

NoMethodError in Call#get_calls_and_is_online

I added the following in my view:

<%= xx = Call.find (56755) %>
<%= debug(xx.client.class) %>

<%= yy = Client.find(41842) %>
<%= debug (yy.call.class) %>

The corresponding sql queries are:
  Call Columns (0.000880) SHOW FIELDS FROM calls
  Call Load (0.000436) SELECT * FROM calls WHERE (calls.id = 56755) LIMIT 1
  Client Load (0.000318) SELECT * FROM clients WHERE (clients.id =
17575) LIMIT 1
  Client Load (0.000303) SELECT * FROM clients WHERE (clients.id =
41842) LIMIT 1
  Client Columns (0.000466) SHOW FIELDS FROM clients
  Call Load (0.052974) SELECT * FROM calls WHERE (calls.ivr_id = 41842)

The corresponding values in datbase are:

SELECT ivr_id FROM calls WHERE (calls.id = 56755) LIMIT 1

I have finally fixed this:

I was over riding the rails configuration at two places.

1. Primary key in Clients table is ivr_id instead of id
2. Foreign key referreng to clients table is ivr_id instead of client_id

So this involves letting rails know that I have overridden the
conventions at 2 places,

1. in Clients.rb use set_primary_key "ivr_id" so that rails know that
the primary key is ivr_id instead of id
2. in Calls.rb use belongs_to :client, :foreign_key => "ivr_id" so
that rails know that it should use ivr_id instead of client_id

The actuall files are

class Call < ActiveRecord::Base
  belongs_to :client, :foreign_key => "ivr_id"

class Client < ActiveRecord::Base
  set_primary_key "ivr_id"
  has_many :calls

Thanks every one,

raj