2015-01-13 3 views
1

У меня есть приложение ruby ​​on rails и я пытаюсь отобразить рейтинг звезд, который пользователь дал на странице индекса. Мне нужно только количество столбцов звезд, но ничего, что я делаю, похоже, работает, может кто-то помочь.Как получить данные из одного столбца в другой таблице?

В моей index.html.erb У меня есть следующий код:

Your star rating: <%= number_with_precision(product.user_star_rating, :precision => 1)%> 

и метод в моем product.rb:

has_many :reviews 
belongs_to :category 
def user_star_rating 
    user_id = session[:user_id] 
    scope :userrating, -> { where('user_id = ?', user_id)} 
    self.reviews.user_id('no_of_stars') 
end 

В моем reviews.rb у меня есть отношения:

belongs_to :product 
belongs_to :user 

validates :review_text, :presence => { :message => "Review text: cannot be blank ..."} 
validates :review_text, :length => {:maximum => 2000, :message => "Review text: maximum length 2000 characters"} 

validates :no_of_stars, :presence => { :message => "Stars: please rate this book ..."} 

в строке self.reviews.user_id («no_of_stars») Я пытаюсь получить количество звезд, которые особенно нам er дал для продукта и вернул его, но я не уверен, что какой-либо из кода в этом методе прав.

Может кто-нибудь помочь? Заранее спасибо.

+0

что это за self.reviews.user_id («no_of_stars»)? Вы рассчитываете на количество отзывов? Просьба предоставить более подробную информацию о логике, как вы оцениваете рейтинг продукта? – Ajay

+0

Пожалуйста, разместите свой код контроллера. – eabraham

ответ

0

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

Иметь как минимум следующую схему:

Отзывы Таблица

user_id, :integer 
product_id, :integer 
rating, :integer 

и настроить свои модели со следующими требованиями:

Review.rb

belongs_to :user 
belongs_to :product 

Product.rb

has_many :reviews 

User.rb

has_many :reviews 

забудьте добавить индексы

Затем, когда пользователь создает обзор для продукта, можно получить по выборке правильный обзор вашего контроллера:

@review = Review.where(:user_id => params[:user_id], :product_id => params[:product_id]).first 

Затем в файле html.erb вы можете отобразить рейтинг пользователя для продукта

"Your star rating: <%= @review.rating %>" 
+0

Спасибо за ответ, я загрузил существующие отношения в моей модели review.rb и product.rb, заменив их на ваш, по какой-то причине не работает. –

+0

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

+0

Это все еще не работает, вы уверены, что это правильно? –