如何从不同表中的一列获取数据?

时间:2015-01-13 18:12:07

标签: ruby-on-rails ruby model scope self

我在rails应用程序上有一个ruby,我试图显示用户在索引页面上提供产品的星级评分。我只需要星数列,但我所做的一切似乎都无效,有人可以帮忙。

在我的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

在我的评论中.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')行中我试图检索特定用户为产品提供的星数并返回它,但我不确定此方法中是否有任何代码是对的。

有人可以帮忙吗?提前谢谢。

1 个答案:

答案 0 :(得分: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 %>"