2014-02-08 70 views
0

我想了解这行代码:红宝石哈希使用数据库

@rating = Rating.where(review_id: @review.id, user_id: @current_user.id).first 

的代码行来自一个Ruby on Rails应用程序,有一个用户,审查和评级模型。这是到目前为止,我是这么理解:

  • 信用排名是一个变量
  • Rating.where()首先是一个方法
  • REVIEW_ID:@ review.id + USER_ID:@ current_user.id是参数 - 并且是一个隐含的哈希键/值对

如何review_id: @review.id或与数据库user_id: @current_user.id工作?

更新问题:对不起,我还是很困惑。 @review.id@current_user.id如何指向数据库中的任何内容?我的数据库中没有任何内容以@符号开头

回答

1

值你有2个字段:"review_id",表"ratings""user_id"

符号@ - 是指实例变量,它不仅可在控制器

可变结构示例:

@current_user = { 
    id: 1, 
    name: "Jhon", 
    last_name: "Wayne" 
} 

这意味着@current_user.id = 1

user_id: @current_user.id 

和查询搜索1表ratings字段user_id

0

此行选择属于与编号为@review.id的评论的所有评级,并且属于当前登录用户,编号为@current_user.id

这样做的SQL版本会是这个样子:

query = "SELECT * FROM ratings WHERE review_id = #{@review.id} AND user_id = #{@current_user.id}" 

编辑:在哈希,每个密钥是指在表中的相应值的列名,你要搜索的内容在那一栏。该值由存储在实例变量中的内容给出。

0

如果你知道数据库的SQL查询,然后

Rating.where(review_id: @review.id, user_id: @current_user.id) 

相当于

SELECT * from ratings where review_id = @review.id AND user_id = @current_user.id; 
  1. @评估不只是一个变量,它的变量实例
  2. Rating.where()将返回一组评分。和Rating.where()。第一返回阵列
0

Rating.where提供ActiveRecord::Relation对象,它知道在review_iduser_id条件的第一个记录。当你为该对象调用first时 - 它执行sql查询,并附加LIMIT 1条件。

SELECT ratings.* FROM ratings WHERE ratings.review_id = 11 AND ratings.user_id = 12 LIMIT 1 

ORM将响应从数据库转换为ruby对象。您可能将其放在实例变量@rating中,可能位于控制器中。该变量将在视图中可访问。

0

当您提供where子句这意味着哈希散列然后关键是字段名称和该键的值是数据库