2014-02-08 109 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子句這意味着哈希散列然後關鍵是字段名稱和該鍵的值是數據庫