人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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ポイント付与させていただきます。
素人質問で恐縮ですが、何卒よろしくお願いいたします。

●質問者: ppt
●カテゴリ:インターネット ウェブ制作
✍キーワード:AS Model MySQL OSX Rails
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● moro
●100ポイント ベストアンサー

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>
◎質問者からの返答

moroさん!

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

できましたできました!

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ