рельсы модель отношений - PullRequest
0 голосов
/ 31 января 2012

Привет! Я действительно новичок в рельсах и пытаюсь создать модель оценки продуктов.

Так что есть пользователи (имя, адрес электронной почты, pw)

У пользователей есть список продуктов, которые пользователь оценил. С оценкой (1-10) и комментарием.

Каждый продукт имеет свое описание, список пользователей, которые его оценили, рейтинг и комментарий.

Как мне создать отношения? Должны ли я иметь 3 модели, пользователя, рейтинг, продукт или я могу обойтись только с пользователем и продуктом?

Кроме того, как бы выглядели отношения: has_many .etc?

Ответы [ 2 ]

3 голосов
/ 31 января 2012

Вот что я бы сделал

class User
  has_many :ratings
  has_many :products, :through => :ratings
end

class Product
  has_many :ratings
  has_many :users, :through => :ratings
end

class Rating
  belongs_to :user
  belongs_to :product
end

Таким образом, если вы хотите получить всех пользователей, которые оценили продукт, вы можете сказать product.users.

1 голос
/ 31 января 2012

Это был бы отличный случай для has_many :through =>

Модель пользователя.

User has_many :ratings
User has_many :products, :though => :ratings

Рейтинг модели.

belongs_to :user
belongs_to :product

Модель продукта.

Product has_many :ratings
Product has_many :users, :through => ratings

n.b. в настоящее время считается, что он превосходит has_and_belongs_to_many, который многие считают устаревшим.
Лично мне никогда не нравилось использовать has_many_and_belongs_to, так как он работает, а также из-за частой доработки, чтобы превратить его в has_many: через, как только в модели соединения требуется дополнительный атрибут (рейтинги в этом случае) .
На самом деле вам нужен рейтинг уровня, так что у вас уже есть аргумент в пользу has_many, :through!

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