Я вижу, чего вы пытаетесь достичь.
Первым делом удалите foreign_key: true
из CreateReviews
миграции, потому что это не имеет никакого эффекта, вы можете захотеть проиндексировать эти два столбца, заменив его на index: true
.
Тогда в вашей модели User
есть две разные has_many
ассоциации, например,
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :client_reviews, foreign_key: "client_id", class_name: 'Review'
has_many :seller_reviews, foreign_key: "seller_id", class_name: 'Review'
end
Почему две разные ассоциации? хорошо, потому что, когда у вас есть две одинаковые ассоциации, она всегда будет использовать последнюю ассоциацию, следовательно, переопределить первую. увидит, что он использует столбец seller_id
для поиска обзоров, если вы попробуете что-то вроде.
user = User.first
p user.reviews.to_sql
Теперь проведите рефакторинг вашей модели Review
, чтобы получить что-то вроде этого
class Review < ApplicationRecord
belongs_to :client, foreign_key: :client_id, class_name: 'User'
belongs_to :seller, foreign_key: :seller_id, class_name: 'User'
end
Теперь вы можете создать client_reviews
и seller_reviews
и запросить каждый из них
seller = User.create(name: 'Seller 1)
client = User.create(name: 'Client 1')
seller.seller_reviews.create(description: 'I like your product', client: client)
review = Review.first
p review.client
p review.seller
Надеюсь, это поможет дать представление о том, что вы можете сделать.