2017-01-01 5 views
0

レールにはModel.find(id_number)リクエストがあります。 DBに直接リクエストを作成する可能性はありますか?たとえば、SELECT * FROM users WHERE id = 1と交換してください。レールの基本はModel.where(id: 1)?私model.rbでレールとSQLストレートリクエスト

EDIT

私が持っている:(レールコンソールで)

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が実行されました(スコープなしの結果は同じです)

+0

なぜARをバイパスしたいですか? –

+0

私が取り組んでいるプロジェクトで、 'User.find(1)'を実行すると 'SELECT * FROM users WHERE id = 1 LIMIT 1'だけではありません。レコードがuniqであることを確認するためにこれを追加するリクエストがあり、すべてのプロジェクトで変更することはできません(モデルのロジックを破る可能性があるため)。だから、私が必要とするものを選択するためのストレートな要求が必要なケースは1つだけです。 –

+1

@AndreyDrozdovは、その論理は 'スコープ'ですか?あなたは 'User.unscoped.find(1)'のようにすることができます – Ursus

答えて

1

確かに、何かのように

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

それは私にハッシュを返しますが、私はレコード情報は表示されません。例えば、この場合は上記の名前から名前を引いてください。 –

+0

はい、いくつかの調査を行いました。 –