Как я могу внедрить систему звездного рейтинга на нескольких моделях в ruby ​​на рельсах? - PullRequest
0 голосов
/ 18 июня 2019

У меня есть две пользовательские модели: Company & Freelancer.Каждый дает звездный рейтинг другому в конце транзакции.Я пытался использовать ratyrate драгоценный камень.Но это допускает только одну rater модель.Есть ли способ добиться этого?Ratyrate генерирует следующие модели, принимая User модель как rater:

class Rate < ActiveRecord::Base
  belongs_to :rater, :class_name => "User"
  belongs_to :rateable, :polymorphic => true
end

class RatingCache < ActiveRecord::Base
  belongs_to :cacheable, :polymorphic => true
end

class AverageCache < ActiveRecord::Base
  belongs_to :rater, :class_name => "User"
  belongs_to :rateable, :polymorphic => true
end

class OverallAverage < ActiveRecord::Base
  belongs_to :rateable, :polymorphic => true
end

Я сделал следующее:

class Rate < ActiveRecord::Base
  belongs_to :rater, :class_name => "Company"
  belongs_to :rateable, :polymorphic => true
end

class Company < ActiveRecord::Base
  ratyrate_rater
end

class Freelancer < ActiveRecord::Base
 ratyrate_rateable "performance"
end

На мой взгляд, у меня есть:

<%= rating_for @freelancer, 'performance' %>

Но это только позволяет компаниям оценивать фрилансеров.Как я могу добиться этого двумя способами, чтобы оба могли оценивать друг друга?

1 Ответ

1 голос
/ 18 июня 2019

Я думаю, что вам нужно посмотреть на полиморфные ассоциации

Это позволяет вам иметь модель, которая может принадлежать более чем одной модели. В вашем случае что-то вроде

class Rating < ApplicationRecord
  belongs_to :rateable, polymorphic: true
end

class Company < ApplicationRecord
  has_many :ratings, as: :rateable
end

class Freelancer < ApplicationRecord
  has_many :ratings, as: :rateable
end

и затем добавьте ратират к Rating

В качестве дружеской заметки (и поскольку у вас репутация 87, если вы не новичок здесь): вам нужно добавить больше деталей и вещей, которые вы пытались задать в вопросе. Это покажет, что вы приложили усилия, чтобы решить проблему самостоятельно, а затем обратились за помощью к StackOverflow. Также сужение области вашего вопроса поможет получить хороший ответ:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...