3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

seedsファイルで西暦テーブルを作りたい

Last updated at Posted at 2019-08-04

前記事で下の画像のミニアプリを実装しようとした際、optionタグ用に1900年から2019年までのレコードを作ろうとして七転八倒したので共有します。 
qiitad.mov.gif

seeds.rbっていうぐらいだからruby式が使えます

qiita seedデータの投入方法
【Rails入門】seedの使い方まとめ | 侍エンジニア塾ブログ(Samurai Blog)
seedsファイルのデータ投入方法について検索すると出てくる上記のリンクでは下記のようなコードを紹介しています。

(例)seeds.rb
2019.times do |number|
  Year.create(year: number)
end

yearsテーブルのyearカラムに0~2019年までのデータを入れるというコードです。
しかし、このコードだと0年からレコードが作られてしまいます。
僕は、ずっとこの式じゃないとデータ投入ができないという固定観念があったので、これでどうやって1900年からだけ入れればいいんだと悩みました。
しかし、seeds.rbでは普通のruby式が使えるので以下のコードでいけます

(正解)seeds.rb
num = 1900
while num < 2020
  Year.create(year: num)
  num += 1
end

これでもいけます

(正解)seeds.rb
2019.times do |number|
  Year.create(year: number) if number >= 1900 
end

干支も一緒に登録する

話はミニアプリに戻りますが、当初は以下のコードでユーザーの選んだ年に対してリアクションを返そうとしていました。

js
$(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なら戌年
      });
    }
  });
});
.
.
.
.

書くのがだる過ぎて干支をテーブルに登録できないか考えました。
テーブルに保存していれば下記のコードを全ての干支で使いまわせますからね。

(正解)js
$(function(){
  $(".daigo-main__year__select").on("change", function(){
    var ment = $(this).val();
    $(".demon").text("あなたは"+ ment +"年ですね。これが").fadeIn(4000, function(){
      $(".demon2").text("メンタリ○ムです").fadeIn(2000);
    });   
  });
});

それを可能にしたのが以下のコードです。

seeds.rb
num = 1900
zyuunishi = ["申", "酉", "戌", "亥", "子", "丑", "寅", "卯", "辰", "巳", "午", "未"]
while num <  2020
  Year.create(year: "#{num}", eto: "#{zyuunishi[num % 12]}")
  num += 1
end

配列の中の要素は配列名[番号]で入手することができます。それを利用してjQuery側で行なっていた干支の仕分けを自動でしてくれるというわけです。

完成!

スクリーンショット 2019-08-04 18.32.31.png
3
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?