2017-01-01 95 views
0

在rails中,我們有Model.find(id_number)請求。我想問的是,有沒有可能向DB創建直接請求,例如:SELECT * FROM users WHERE id = 1和替換rails基本Model.where(id: 1)Rails和SQL直接請求

編輯

在我model.rb我:

scope :search_import, -> {includes(:translations)} 
default_scope -> {self.search_import} 

,並要求(在軌控制檯)的樣子:

User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 
User::Translation Load (0.6ms) SELECT `users_translations`.* FROM `users_translations` WHERE `users_translations`.`category_id` IN (1) 

但我不希望User::Translation已執行(與unscoped我有相同的結果)

+0

你爲什麼要它繞過AR? –

+0

在我的工作項目中,當您執行'User.find(1)'時,它不僅僅是'SELECT * FROM users WHERE id = 1 LIMIT 1'。它做了一些額外的請求,以確保記錄是uniq,並且我無法對所有項目進行更改(因爲它可能會破壞模型的邏輯)。所以只有一種情況下,我需要直接請求來選擇我需要的東西。 –

+1

@AndreyDrozdov是那個邏輯'範圍'?在這種情況下,你可以像'User.unscoped.find(1)' – Ursus

回答

1

當然,像

ActiveRecord::Base.connection.execute("SELECT * FROM users WHERE id = 1") 
+0

它返回我的散列,但我沒有看到任何記錄信息,例如在這種情況下,我想從這個請求上面取出名字 –

+0

是的,做了一些研究,thnx多數民衆贊成在我需要! –