外部テキストファイルからランダムに一行出力する
アプリケーションの開発にあたって「今日の格言」みたいな感じで、ちょっとしたテキストをランダムに表示するものを作りたくなったので、実装することにした
仕様
格言リストみたいなのを、テキストファイルとして配置
その中から、ランダムな一行をコントローラからビューに渡す
ビューでそれを表示する
まずは、格言リストをテキストファイルで製作し app/assets/messagelist.txt に配置した
MESSAGE_1
MESSAGE_2
MESSAGE_3
コントローラに、ファイル全文を取得し行ごとに配列として保存するよう記載
ランダム範囲 (ファイル行数) で取得した値を key としてインスタンス変数に代入
最後にビューで変数を元に出力するようにした
# Controller
class IndexController < ApplicationController
def index
f = File.open('./app/assets/messagelist.txt', 'r').read
vals = f.split("\n")
@message = vals[rand(vals.size)]
end
end
<!-- views/index/index.html.erb -->
<div class="container">
<h2><%= @message %></h2>
<img src="/assets/logo.jpg" class="logo" alt="" />
とりあえず、要望通りの動作はしてくれた
もう少し file.lineno とかを使ってもう少しスマートにかけるような感じだったけど、ちょっとすぐにわからなかったので・・・
いつか、もっとスマートにかけたら記事に残しておく