Ruby on Rails開発のインターン (Day 11)
こんにちは、皆さん!
今日の朝はちょうど座った時に避難訓練があった。ちょっとタイミングがね...(笑)
それはさておき、今日はHeroku上のバグを修正できるようにがんばっていくぜ!
- トピック:
- 疑問:
- 問題:
- 学習した内容:
- モデルクラスの中で関数を定義し、他のファイルでそのクラスからなるオブジェクトに対してその関数を使える
- 今後やりたいこと:
- リソース:
モデルクラスの中で関数を使う
User
というモデルがあり、 そのuserには'name', 'email', 'age', 'gender', 'address'があるとしよう。もし、この状況で頻繁にuserの詳細をアウトプットさせるようだったら、毎回下記のようにコードを打ち込むことになる。
"Name: " + @user.name + " Email: " + @user.email + " Age: " + @user.age + " Gender: " + @user.gender + " Address: " + @user.address
これはめんどくさいし、後で修正するときにすごく手間がかかる。
ということで、次のようにapp/models/user.rb
ファイルの中に関数を定義する。
def info "Name: " + @user.name + " Email: " + @user.email + " Age: " + @user.age + " Gender: " + @user.gender + " Address: " + @user.address end
そしたら、詳細をアウトプットしたいとき、info
関数を下記のように使えばできる
# users_controller.rb def index @users = User.all @users.each do |user| puts user.info end end def show @user = User.find(params[:id]) puts @user.info end
これで書くコードの量がだいぶ減る。
後から考えてみれば、Userはapp/models/user.rb
でクラスとして定義されていてUserのオブジェクトであるのなら、Userクラスで定義されている関数はごく普通のOOP言語のように使える。Railsのように最初から結構複雑にいろいろなファイルを作られると案外気づかないものだ(笑)
tunemygc
ジェムはrakeタスクを妨害する可能性がある
heroku run rake db:seed
をするときにエラーが発生し、うまくいかなかった。いろいろ試した。データベースのリセット、Herokuにコードを再度プッシュなど、けどどれもダメだった。それで、諦めて、一個前のコミットに戻った。変わった内容は
Gemfile
の中にtunemygc
ジェムがあるかどうかだけ。そしたら、不思議にもHeroku上でうまく使いたかったコマンドが使えるようになった。結果わかったことは、この特定のジェムに関しては、Heroku上にアドオンがあり、HerokuではGemfile
ではなく、そっちを使うことが望ましかったようだ。よって、存在するジェムのうち、いくつかのジェムはHeroku上でrakeタスクを邪魔し、アプリケーションがうまくいかなくなる。そういう時はググってHeroku用のアドオンがないかを探してみよう!
***通常、クレジットカードの登録を要求されるが、心配はしなくてよい。これらのアドオンは無料なので請求されはしない!!***
まとめ
tunemygc
をどうやってHeroku上で使うかを発見できたので、結構うれしかった。想像以上に時間かかってしまったけど... 。こっからは帰宅後、学校に戻ってからの話。何人かのコンピュータサイエンスの友達に久しぶりに会った。インターン始めて以来初めて会ったからインターンについて色々聞かれた。その中で、なぜ職場ではLinuxを使っているのか聞かれたがよくはわからなかった。中にはLinuxはWindowsやMacOSと違って、オープンソースで情報を提供会社に盗まれないからとかいう理由まで。とりま、明日マネージャーに聞いてみよう!
ご精読ありがとうございました。では、また次回まで✌