Actionへの動的な処理の追加
のTryにて、ユーザー名、生年月日、年齢をViewに追加しました。前項
例えば、生年月日が1987/6/10で、本日が2016/2/14の場合、
2016021419870610-289604
という結果になり、これを10,000で割ると(10,000の位は年を意味します)、
になります。この結果から小数点以下を切り捨てると、28になり、動的に年齢を割り出すことができます。
では、まずはControllerでこのテクニックを応用しましょう。
赤枠の部分を修正していきます。
年齢算出のテクニックを扱うには、生年月日が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が代入されます。
PREVLESSON変数を活用しよう!変数を活用しよう!