前記事で下の画像のミニアプリを実装しようとした際、optionタグ用に1900年から2019年までのレコードを作ろうとして七転八倒したので共有します。
seeds.rbっていうぐらいだからruby式が使えます
qiita seedデータの投入方法
【Rails入門】seedの使い方まとめ | 侍エンジニア塾ブログ(Samurai Blog)
seedsファイルのデータ投入方法について検索すると出てくる上記のリンクでは下記のようなコードを紹介しています。
2019.times do |number|
Year.create(year: number)
end
yearsテーブルのyearカラムに0~2019年までのデータを入れるというコードです。
しかし、このコードだと0年からレコードが作られてしまいます。
僕は、ずっとこの式じゃないとデータ投入ができないという固定観念があったので、これでどうやって1900年からだけ入れればいいんだと悩みました。
しかし、seeds.rbでは普通のruby式が使えるので以下のコードでいけます
num = 1900
while num < 2020
Year.create(year: num)
num += 1
end
これでもいけます
2019.times do |number|
Year.create(year: number) if number >= 1900
end
干支も一緒に登録する
話はミニアプリに戻りますが、当初は以下のコードでユーザーの選んだ年に対してリアクションを返そうとしていました。
$(function(){
$(".daigo-main__year__select").on("change", function(){ //optionタグを選択すると発火
var ment = $(this).val();//値を入手
if (ment % 12 == 0) {
$(".demon").text("あなたは申年ですね。これが").fadeIn(4000, function(){
$(".demon2").text("メンタリ○ムです").fadeIn(2000);//値 ÷ 12のあまりが0なら申年
});
}
else if (ment % 12 == 1) {
$(".demon").text("あなたは酉年ですね。これが").fadeIn(4000, function(){
$(".demon2").text("メンタリ○ムです").fadeIn(2000);//値 ÷ 12のあまりが1なら酉年
});
}
else if (ment % 12 == 2) {
$(".demon").text("あなたは戌年ですね。これが").fadeIn(4000, function(){
$(".demon2").text("メンタリ○ムです").fadeIn(2000);//値 ÷ 12のあまりが2なら戌年
});
}
});
});
.
.
.
.
書くのがだる過ぎて干支をテーブルに登録できないか考えました。
テーブルに保存していれば下記のコードを全ての干支で使いまわせますからね。
$(function(){
$(".daigo-main__year__select").on("change", function(){
var ment = $(this).val();
$(".demon").text("あなたは"+ ment +"年ですね。これが").fadeIn(4000, function(){
$(".demon2").text("メンタリ○ムです").fadeIn(2000);
});
});
});
それを可能にしたのが以下のコードです。
num = 1900
zyuunishi = ["申", "酉", "戌", "亥", "子", "丑", "寅", "卯", "辰", "巳", "午", "未"]
while num < 2020
Year.create(year: "#{num}", eto: "#{zyuunishi[num % 12]}")
num += 1
end
配列の中の要素は配列名[番号]
で入手することができます。それを利用してjQuery側で行なっていた干支の仕分けを自動でしてくれるというわけです。