こんにちは、エンジニアのさもです。
今回は今日学んだことを忘れないようにするためのメモです。
スポンサーリンク
[Ruby]文字列と日時の比較
間違った実装をしていました。
こんな感じです
user.applied_at.strftime("%Y-%m-%d 11:00:00") < Time.zone.now
ちょいちょい前から、時刻がずれているような気がするみたいな報告があったようなので、調査したところ、
上のコードのように、左辺は日時を文字列にしたものなのに対し、右辺はタイムゾーン有りの日時です。正しく比較するには、以下のようにする必要がありました
user.applied_at.strftime("%Y-%m-%d 11:00:00 +0900") < Time.zone.now
日本のタイムゾーンを追加しました。でも、タイムゾーンを直書きっていやですよね。なので、タイムゾーンクラスにパースしました。
Time.zone.parse(user.applied_at.strftime("%Y-%m-%d 11:00:00")) < Time.zone.now
[Ruby]alias_method
仕様の中で、管理画面からの登録は日付だけど、比較や画面への表示は11時にして欲しいというカラム(日時型)がありました。
今までは画面やコントローラ等で毎回strftimeを呼んで11時と指定していたのですが、一部で23時になっていたり、10時になっている実装を見つけたので、モデルで一括管理することにしました。
そこで使ったのがalias_methodです。
class User alias_method :ori_applied_at, :applied_at APPLY_TIME = "11:00:00" def applied_at Time.zone.parse(ori_applied_at.strftime("%Y-%m-%d #{APPLY_TIME}")) end end
これで、普通にuser.applied_at
とするだけで11時に揃えられた値が取得できます。
[CSS] inherit
デザイナーさんの書いたcssで良く見るなーと思っていて、調べてみました。
inheritをつけると、親要素のスタイルを引き継げるそうです。
<style> div.test_inherit_parent { border-bottom: double 10px #0000ff; } p.test_inherit_child{ border-bottom: inherit; padding-bottom: 3px; } </style> <div class="test_inherit_parent "> <p class="test_inherit_child">aaaa</p> </div>
-------------------------[実行結果]-------------------------
aaaa
--------------------[実行結果ここまで]------------------------------
長い青線がdivのボーダーで、短いのが継承したpタグのボーダーです。
[Jquery]eq(position)
jQueryで指定したポジション(上から何個目か)の要素を取ってくるセレクタです。参考
こいつには本当に悩まされました。
ある画面で横並びのテーブルがあったのですが、左のテーブルのある行をクリックしたら、右のテーブルの同じ行の背景色を変えるという動作がjQueryにて書かれていました。右のテーブルというのを、$("table").eq(1)
のように書いてありました。
これはこれでうまく動いていたのですが、ある改修をしてから、突然動かなくなりました。
ある改修とは、「元々あったテーブルの上部に別のテーブルを追加する」ことです。
うまく動いていたときは、左のテーブルがpositionが0, 右のテーブルのpositionが1となっていたのですが、テーブルを追加したことにより、
追加したテーブルのpositionが0、左のテーブルのpositionが1、右のテーブルのpositionが2となったため、正しく動作しなくなりました。
eqでの指定をやめて、普通にidで指定するようにしました。ちゃんちゃん
以上、今日学んだことでした。
読者登録をしていただけると、ブログを続ける励みになりますので、よろしくお願いします。