geekday’s diary

超絶初心者のエンジニアがいろいろなプログラミング言語に挑戦してみるブログです。

Ruby on Railsのtimezoneをtokyoに変更し、ついでにいい感じに時刻をビューに出力する

DBからデータを取得し、オートインクリメントであるcreated_atをビュー側に出した時の話。

先日設定したSQLite Managerでdb:seedした時間が全然違うなぁ・・なんかUTCとかつくしなぁ、、と思って見ていたら、

 

d.hatena.ne.jp

このサイトで全てが解決した。

railsの仕様上、全て日本時間-9時間の時刻でDBに入る他、そのままビューに出すとUTC付きで出力されるというのだ。

こらあかん、ってことで早速対策を。

まずはconfig/application.rb に

config.time_zone = 'Asia/Tokyo'

を追加。(※ruby5以降ではenvironment.rbではなくapplication.rbに記述となるので注意)

 

これをもって、ビュー側で

<%= @test[:created_at] %>

と出すと、日本時間のcreated_atの時間+0900

という表記に・・。この0900も邪魔なのでstrftime関数で除外。

<%= @test[:created_at].strftime("%Y-%m-%d%H:%M") %>

これにて一件落着、だったんだけど、

いちいちこうやるのはめんどくさいし、サムい。

ってことで引き続き上記のサイトに習ってアプリケーションヘルパーに

simple_timeメソッドを定義することに。

 

/app/helpers/application_helper.rb

def simple_time(time)
time.strftime("%Y-%m-%d %H:%M ")
end 

 

ちょっとスペースをあけてるのは、このまま出力すると全部くっついちゃって見づらいから。

てことで、あとはビュー側で、

<%= simple_time(@test[:created_at] ) %>

でOK。

すごい楽になって嬉しい。

SQLite managerを導入してみた。

Ruby on Railsで、DBはSQLiteを利用しているが、

DBの状態をみるときに、いちいちコマンドでやらなきゃいけないのか・・とゲンナリ。

phpMyadmin的なツールがないかなー、と思って探してたらあった。

d.hatena.ne.jp

 

上記のサイトをみると、シンプルながらいい感じ!

こういうのを探してたんだよね、と思いさっそく導入。

・・・といっても、Firefoxのアドオンをいれて、ツール>SQLiteManagerを起動 で簡単に立ち上がった。

DBの接続だけ、db>development.sqlite3 を読み込ませれば、ローカル環境のDB状態がサクッとみられるように。

ストレスが一気に軽減した・・!

 

Ruby on Railsで特定ページのみCSS,JavaScriptを読み込ませる

以前記載した件の続きのような話になるがメモ。

Railsで特定ページのみ指定のCSSJavaScriptを読み込ませたい場合はrequire_freeをコメントアウトするが、その続き。

 

keruuweb.com

上記のページが極めてわかりやすかったので参考にする。

ここでいうstep1は上述のrequire_freeなのでとばし、step2から着手する。

config/initializers/assets.rb 

内に、指定のJSファイルをプリコンパイル対象に含める以下記述を行う。

Rails.application.config.assets.precompile += %w( tops/*.js ) 

※ここでは、assest/JavaScript直下にtopsフォルダを作製、その中のjsファイルは全てプリコンパイル対象としている。なお、用意したファイルはtop.jsの1ファイル。

 

そのあとで、view側には以下を記載する。

<%= javascript_include_tag "tops.js" %>

 

これでめでたくJSファイルを読み込むことができた。もしできない場合は一旦サーバを再起動してみるとよいかもしれない。

cssも同様で、assetsファイルに

Rails.application.config.assets.precompile += %w( tops.css )

 と記述。

view側には

<%= stylesheet_link_tag "tops", :media => "all" %>

と記載。これで無事読み込まれることになる。

なお、環境によって違うのかもしれないが、自分のローカル環境ではcss読み込みの際に再度サーバを立ち上げてくださいとエラーが出てきたので(develop環境でも必要・・?)その通りに従って再起動した結果、無事出来た。

 

余談だが、今回cssをいじったついでに画像ファイルの読み込みも行ったのだが、railsの場合画像パスがassets/image内であっても、assets/画像ファイル名(フォルダでまとめている場合はassets/フォルダ名/画像ファイル名)とする必要があってちょっと戸惑った。

 

 

Ruby on Railsにbootstrapを入れてみる

view側をいい感じにできる自信が皆無だったので、bootstrapを導入してtwitter風のいい感じのデザインにしたいと思い入れてみたのでメモ。

 

www.sejuku.net

 

これをみながら取り掛かる。

scssで取り扱いたかったので、

gemファイルに以下を記述。

gem 'bootstrap-sass'

で、bundle install でbootstrapを入れる。

その後、application.scssにて

@import "bootstrap-sprockets";

@import "bootstrap";

を記載。忘れずに例の*=require_trueなどは消しておく。

そして、application.jsに

//= require jquery
//= require bootstrap-sprockets 

を記載。これで一旦サーバを立ち上げてみると・・

謎のsyntaxエラーが起きていた・・・。

File to import not found or unreadable: bootstrap-sprockets. 

 

発生箇所はapplication.scss。どうやら、 bootstrap-sprocketsが見つからずimportできませんというエラーになっている模様。

おかしいな、と思いもう一度 $ bundle installをしてみると・・

なんと入っていない!!

あれ、gemファイルに記載したよな・・と思って見てみると・・gemにもない!

 

よく調べてみると、自分が書いたのはワークスペース直下のgemfileだった。

プロジェクトフォルダ直下にもgemファイルがあり、そこに書き込むことで

ちゃんとinstallでき、エラーは消え、ボタンはbootstrap風に表示が変わった。

 

ただのケアレスミスでした。。

 

 

 

 

 

application.cssのrequire_tree にハマった話

ハマったのでメモ。

development環境でview側をいじろうと思い、

 

<%= stylesheet_link_tag "test", :media => "all" %>

でstylesheets直下に置いた任意のtest.cssを読み込ませた時の話。

色々とがちゃがちゃいじったのだが、結局一旦test.cssは外そうと思い上記のタグを消したら、なぜか変化なしだった。

 

ターミナルをみるとEnviroment:developmentとなっており、

あれ、development環境でもプリコンパイルっているんだっけ?とか思いつつ、

下記のサイトも見ながらrakeコマンドを叩くも、やっぱり変わらず。。

RailsでCSS(スタイルシート)を読み込みたい | Ruby on Railsサービス開発逆引き辞典

 

おかしいな、と思いソースコード表示で確認してみると・・

しっかりtest.cssを読み込んでいる・・!

というか、全てのscss・cssファイルを読み込んでいるではないか!

 

なんで??とぐぐってみると、どうやら以下が原因のようだった。

beautifulajax.dip.jp

 

デフォルトで読み込まれるapplication.cssに、

require_tree = 全scss・cssファイル読み込みしまっせ、というとんでもない処理が書かれているのだ。

しかも一見コメントアウトされてるっぽい風に見えるところがまたなんとも言えない・・。

削除したら、無事指定した分だけのcssが読み込まれるようになりました。

とんだ落とし穴だな・・。

 

 

 

 

Ruby on Railsでモデルの作成をしてみる

掲題の件、まずはdevelopment.sqlite3の作成から。

$ rake db:create

のコマンドで作成。rakeコマンドは、

Rake - - Railsドキュメント

上記のサイトで細かく解説されている。

その後、モデルの作成をするため、

$ rails g model モデル名 カラム名:型...

で作成。

実行すると、

app/models直下に、モデル名.rbが、

そしてdb/migrate直下に、マイグレーションファイルが作成される。

マイグレーションを実行するため、

$ rake db:migrate

を実行。

ちなみに、マイグレーションとは

www.rubylife.jp

このサイトがわかりやすかったが、ようはMySQLでいうcreate table~の内容が書かれたスクリプトファイルを実行し、テーブルを作成するもの。

このコマンドはそんなマイグレーションを実行するわけだが、処理の流れとしてはRailsドキュメントのサイトにあるように、テーブルを調べた上で、なければ実行をするというものになっている。

 

これで、実際にテーブルが作成され、データ投入ができる状態になる。

 

 

エディタって結局何がいいの?

番外編。独り言程度のメモ。

コーディングをするうえでエディタは重要。
昔仕事でPHPを使っていた時はZendFramework+Eclipseで書いていたので、
肌になじんでいるのはEclipseだったけど、自宅のPCをMacbook proに変えた時点でエディタはAtomを使うようになった。

 

eng-entrance.com


AtomcakePHPを書いたことがあり、まあ特にそんなに違和感はなかったが、
今進めているRuby on Railsの開発にあたり、ちょっと変えてみようかと思って探してみたら以下があった。

sublimecodeintel.github.io

なにやらよさげで、調べてみたらなんと定義ジャンプがあるではないか。

qiita.com

これ、Eclipseの時すごい使ったんだよなぁ。
ってことで、時間があったら早速使ってみようと思う。

 

※後日、使ってみたら神エディタだった。。

sweep3092.hatenablog.com

ここに書いてある機能、すげえ。。