質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

1566閲覧

ActiveRecordで生SQLを使いたい

josan

総合スコア24

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/01/15 01:55

Ruby on Railsの初心者です。

新規APIモードを使って新規作成したフォルダ(mysqlに対応修正済)

rails new driver_api --api

現在models/driver.rbのRecordが空っぽです。
ここの生SQLを操作すると思いますが

class Driver < ApplicationRecord end

テーブルに対して、例えば
「ランダムに1レコードをselectし,そのレコードのnumberを+1してupdateする」
という処理を実行したいため、どう書けばいいです。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2019/01/15 01:56

「どう書けばいいです」は、「SQL文」をどうすればいいかということでしょうか、それとも「SQL文をRailsから実行する」にはどうすればいいか、ということでしょうか。
josan

2019/01/15 02:05

指摘ありがとうございます。SQL文をRailsから実行するにはどうすればいいですか
maisumakun

2019/01/15 02:08

SQL文の組み方によっては、Railsの枠内に落とし込めるので、生SQLで実行する必要がない可能性もあります。まずは「どのような方法でランダム取得するか」を先に考えましょう。
josan

2019/01/15 03:38

回答ありがとうございます。
guest

回答2

0

生SQLである必要はないと思います

完全連番

物理削除がないなら最大値からランダムな数値を求めれば良い

ruby

1driver = Driver.find(rand(1..Driver.maximum(:id))) 2driver.update!(number: driver.number + 1)

物理削除で歯抜けあり

一旦 ID 配列を取得してランダム採取するなどでしょうか
RNAD よりは負荷は軽いと思いますが配列展開があるので同じくデータ数は注意が必要です

ruby

1driver = Driver.find(Driver.ids.sample) 2driver.update!(number: driver.number + 1)

投稿2019/01/15 09:25

編集2019/01/15 09:28
Ighrs

総合スコア656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

まず、「DBからランダムなレコードを選択する」だけでも考えることは多いです。レコードが少なければ何も考えずにORDER BY RAND()でいいのですが、増えてきた場合には実用できないほど遅くなります。

  • ORDER BY RAND()が使えるぐらいにテーブルが小さいかどうか
  • 主キーは「完全な連番」「少し飛んでいる程度」「バラバラ」「そもそも番号ではない」のいずれに当たるか
  • 主キーが使えない場合に、ある程度均等に引くのに使えそうなカラムはあるのか
  • 厳密に均等に引かなければいけないのか、それとも偏りが出てもいいのか

これらの条件がわからないと、使うべきSQL文すら決まりません。

投稿2019/01/15 02:03

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問