我想了解这行代码:
@rating = Rating.where(review_id: @review.id, user_id: @current_user.id).first
代码行来自Ruby on Rails应用程序,该应用程序具有用户,评论和评级模型。这是我到目前为止所理解的:
review_id: @review.id
或user_id: @current_user.id
如何使用数据库?
更新问题:抱歉,我仍然感到困惑。 @review.id
或@current_user.id
如何指向数据库中的任何内容?我的数据库中没有任何内容,以@符号
答案 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 :(得分: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;
答案 3 :(得分:0)
Rating.where
提供ActiveRecord::Relation
个对象,该对象了解review_id
和user_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子句中提供哈希时,它意味着哈希的键是字段名,该键的值是数据库中的值