2016-09-19 7 views
1

У меня есть две моделей, пользователи и запросRails - модель BELONGS_TO и has_one же класс

По определению, пользователь может иметь множество запросов, и каждый запрос имеет один назначенный агент (который может быть другим пользователем)

с основанием, как,

class User < ActiveRecord::Base 
    has_many :requests 
end 

Но есть столбец запроса модели, agent_id, который должен быть связан с пользователем. Так как я установил отношения лучший способ,

1. User has_many requests (with column requests.user_id) 
2. Request has_one user(with column requests.agent_id) 

Оба эти на столе запросы

ответ

1

Это может быть то, что вы ищете.

class User < ActiveRecord::Base 
    has_many :requests 
end 

class Request < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :agent, class_name: 'User', foreign_key: 'agent_id' 
end 
+0

Точно. Благодаря! :) –

0

Вы хотите использовать длинную форму версию ассоциаций. Посмотрите их в исходном коде, чтобы увидеть все параметры, но для этого примера нужно указать только один дополнительный параметр, поскольку все остальное по умолчанию.

Для пользователя

has_many :requests, foreign key: :agent_id 

Для запроса

has_one: пользователь, foreign_key:: agent_id

+0

Привет, спасибо за ваш ответ, но это не то, что я ищу, я отредактировал вопрос, чтобы сделать его более понятным. –

0

Это должна работать

class User < ActiveRecord::Base 
    has_many :requests 
end 

class Request < ActiveRecord::Base 
    belongs_to :agent, class_name: 'User' 
end 

Если вы хотите также связать пользователя с agent_id:

class User < ActiveRecord::Base 
    has_many :requests, foreign_key: 'agent_id' 
end 
0

Лучший способ установления отношений - следовать соглашениям об именах Rails. Переименуйте столбец 'agent_id' в 'user_id'.

Поступая таким образом, вы можете использовать

class User < ActiveRecord::Base 
    has_many :requests 
end 

class Request < ActiveRecord::Base 
    belongs_to :user 
end 
Смежные вопросы