作って学ぶRuby on Rails Vol.7 年齢を設定しよう


作って学ぶRuby on Rails Vol.7 年齢を設定しよう
目次
  1. Actionへの動的な処理の追加

Actionへの動的な処理の追加

のTryにて、ユーザー名、生年月日、年齢をViewに追加しました。前項

例えば、生年月日が1987/6/10で、本日が2016/2/14の場合、

2016021419870610-289604

という結果になり、これを10,000で割ると(10,000の位は年を意味します)、

になります。この結果から小数点以下を切り捨てると、28になり、動的に年齢を割り出すことができます。

では、まずはControllerでこのテクニックを応用しましょう。

Ruby_on_Rails_年齢1

赤枠の部分を修正していきます。

年齢算出のテクニックを扱うには、生年月日がDate型


class TopController < ApplicationController
  def index
  end
  def profile
  @user_name = "レイルズ"
  @birthday = "1987/6/10"
  date_format = "%Y%m%d"
  birthday = @birthday.to_date
  @age = (Date.today.strftime(date_format).to_i -birthday.strftime(date_format).to_i) / 10000
  @hometown = "滋賀県"
  @skills = "プログラミング"
  @remarks = "よろしくお願いいたします"
  end
end

日付のフォーマットについてdate_formatという変数を定義していますが、これは日付のフォーマットを指定しています。例えば、1987/6/10という文字列だった場合、%Y%m%dと指定すると19870610というフォーマットになります。%Y年%m月%d日と指定すると1987年6月10日%Y年%m月と指定すると1987年1月%Y年のみだと1987年となります。

型の変換について@birthday.to_dateという記述がありますが、これは@birthdayの型をDate型に変換しています。Rubyでは、変数に対してto_xxxというメソッドを使用することで型変換を行います。例として、下記のような型変換用のメソッドがあらかじめ用意・数値から文字列への変換to_sを使用します。例:777.to_s*・文字列から整数への変換to_iを使用します。例:“777”.to_i※整数に変換できない内容の場合はnilが返ります。・文字列から浮動小数型への変換to_fを使用します例:“777.77”.to_f※変換できない内容の場合はnilが返ります。・日付型への変換*to_date例:“1987/6/10”.to_date※変換できない内容の場合はnilが返ります。その他、いろいろな型変換系のメソッドが用意されているので、興味があったら調べてみて下さい。


(Date.today.strftime(date_format).to_i - birthday.strftime(date_format).to_i) / 10000


それでは、上記のコードを読み解いていきましょう。


Date.today.strftime(date_format).to_i

この部分は、Dateクラスのtodayメソッドで本日の日付を取得し、取得した日付をstrftimeメソッドで指定したフォーマットに変換後、to_iメソッドで数値に変換しています。引き算


birthday.strftime(date_format).to_i)

この部分も同じように、birthday変数(Date型)に対して、strftimeでフォーマットを変換し、to_iで数値化しています。よって、コードが実際に実行される際は、下記のような計算式になります。


(20160214 - 19870610) / 10000


何も指定がない場合は、小数点以下は切り捨てられるため、結果は28となり@ageには28が代入されます。

Ruby_on_Rails_年齢2

NEXTLESSONViewをもっと使いこなそう!Viewをもっと使いこなそう!

PREVLESSON変数を活用しよう!変数を活用しよう!

目次-Ruby&RubyonRailsテキスト目次目次-Ruby&RubyonRailsテキスト目次


CodeCampus編集部
この記事を書いた人
CodeCampus編集部
まずは7日間お試し!人気プログラミング講座を無料公開中
オンライン・プログラミングレッスンNo.1のCodeCamp