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!
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With