2012-01-31 4 views
0

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

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

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

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

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

Также будет выглядеть: has_many .etc отношения?

ответ

1

Это будет отличный случай для 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: через как только в модели соединения будет добавлен дополнительный атрибут (рейтинги в этом случае) ,
На самом деле вам нужен рейтинг «level», поэтому у вас уже есть случай для has_many, :through!

3

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

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.

Смежные вопросы