ruby哈希与数据库

时间:2014-02-08 04:58:50

标签: ruby-on-rails ruby database hash

我想了解这行代码:

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

代码行来自Ruby on Rails应用程序,该应用程序具有用户,评论和评级模型。这是我到目前为止所理解的:

  • @rating是一个变量
  • Rating.where()。首先是方法
  • review_id:@ review.id + user_id:@ current_user.id是参数 - 并且是隐式哈希键/值对

review_id: @review.iduser_id: @current_user.id如何使用数据库?

更新问题:抱歉,我仍然感到困惑。 @review.id@current_user.id如何指向数据库中的任何内容?我的数据库中没有任何内容,以@符号

开头

5 个答案:

答案 0 :(得分:1)

"review_id"中有2个字段:"user_id""ratings"

符号@ - 表示它是实例变量,不仅可以在控制器中使用

变量结构示例:

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

这意味着@current_user.id = 1

user_id: @current_user.id

并在表ratings字段user_id

中查询搜索1

答案 1 :(得分:0)

此行会选择属于ID为@review.id的评论的所有评分,并且属于当前登录的ID为@current_user.id的用户。

这个的SQL版本看起来像这样:

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

编辑:在哈希中,每个键都引用表中的列名,相应的值是您在该列中搜索的内容。该值由存储在实例变量中的内容给出。

答案 2 :(得分: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. @rating不只是一个变量,它是一个实例变量
  2. Rating.where()将返回一系列评分。和Rating.where()。首先将返回数组的第一条记录

答案 3 :(得分: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中,可能在控制器中。可以在视图中访问此变量。

答案 4 :(得分:0)

当你在where子句中提供哈希时,它意味着哈希的键是字段名,该键的值是数据库中的值