Rails has_one with class name and foreign key

activerecord, foreign-keys, ruby-on-rails

Solution

has_one :requester, :class_name => "User", :foreign_key => "requester_id"

This line (from the code that you posted) indicates that the `requester` is a `User`, and the table `users` should contain a column `requester_id` that is the foreign key toward `friend_requests` records. The rails error message states that the column `requester_id` does not exists (you have to create it via a migration).

In this case, use

rails generate migration AddRequesterIdToUsers requester_id:integer

It will generate the migration:

class AddRequesterIdToUsers < ActiveRecord::Migration
  def change
    add_column :users, :requester_id, :integer
  end
end  

And run them migration with `rake db:migrate`.

Look at the Rails Relation Guide for more information on differences between `has_one` and `belongs_to`, and how to use them.

Problem

I have a Rails model which I use two `has_one` relations: `requester`and `friend`. When in the console I use: ``` f = FriendRequest.all f[0].requester ``` I get `ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: users.requester_id: SELECT "users".* FROM "users" WHERE "users"."requester_id" = 4 LIMIT 1` . I don't really know how to specify a `has_one' relationship with a class name and a key which specifies the record. This is my model: ``` class FriendRequest < ActiveRecord::Base has_one :requester, :class_name => "User", :foreign_key => "requester_id" has_one :friend, :class_name => "User", :foreign_key => "friend_id" end ``` How could I do it? In a `belongs_to` relationship I use the same, obviously replacing `has_one`with `belongs_to`. Thanks!

Original source