Rails のことで教えて下さい!

利用している環境は、Rails 1.2.2 と MySQL 5.0.27 と OSX です。

やりたいことは、テーブル(word table)にあるデータの
フィールド毎(word1,word2,word3)にランダムにデータを抽出し
そのランダムに抽出した3つのフィールドのデータを
特定のページ(view.rhtml)に出力するということです。

このテーブルのデータを、特定のページ内(例:view.rhtml)に、
word1,word2,word3から各々ランダムに抽出したデータを
表示させたいと思っています。

完全にランダムなので、偶然同じレコードのものが3つ抽出される
ということでも構いません。

これを、controller/model/view にどのように書くとよいでしょうか。

SQL文で
select
(SELECT word1 FROM word ORDER BY RAND() limit 0,1) as word1,
(SELECT word2 FROM word ORDER BY RAND() limit 0,1) as word2,
(SELECT word3 FROM word ORDER BY RAND() limit 0,1) as word3
と書くと、求める値は取れるのを MySQL Query Browser では確認できましたが、
これをRailsでどのように記載すればよいかが分かりません。。

おー!と思う回答をしていただいた方には、100ポイント付与させていただきます。
素人質問で恐縮ですが、何卒よろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:2007/08/02 19:07:08
  • 終了:2007/08/03 09:20:06

ベストアンサー

id:moro No.1

moro回答回数23ベストアンサー獲得回数102007/08/03 01:13:34

ポイント100pt

http://d.hatena.ne.jp/moro/

URLはダミーというか自己紹介です。この問題についての情報はたぶんありません。

安直ですがこんなので如何がでしょう。find_by_sqlは便利ですね。モデルの配列を返すのでshiftしてます。

# app/models/word.rb
class Word < ActiveRecord::Base
  def self.find_by_random
    find_by_sql(<<-SQL).shift
    select
    (SELECT word1 FROM words ORDER BY RANDOM() limit 0,1) as word1,
    (SELECT word2 FROM words ORDER BY RANDOM() limit 0,1) as word2,
    (SELECT word3 FROM words ORDER BY RANDOM() limit 0,1) as word3
    SQL
  end
end
# appp/controllers/rand_controller.rb
class RandController < ApplicationController

  def index
    @word = Word.find_by_random
  end
end
# app/views/rand/index.rhtml
<table>
<tr>
  <td><%= @word.word1 %></td>
  <td><%= @word.word2 %></td>
  <td><%= @word.word3 %></td>
</tr>
</table>
id:ppt

moroさん!

本当にありがとうございます!

できましたできました!

これができずにここ何日にも何もできずにいました。。。

本当にありがとうございます(涙

2007/08/03 09:19:16
  • id:ppt
    この後こちらをご覧いただいた方への参考までに。
    modelへ記載するSQL文が、「RANDOM()」となっているところは、
    このままだとエラーになってしまうため、「RAND()」とすると
    そのままいけますー。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません