ActiveRecordモデルの独自で作成したメソッドもjson(もしくはxml)で出力したい
シチュエーション的には、
class Book < ActiveRecord::Base attr_accessible :title, :author, :price def price_with_tax return self.price*1.05 end end
こんな感じでモデルに独自のメソッド(price_with_tax)がある場合、
# GET /books/1 # GET /books/1.json def show @book = Book.find(params[:id]) respond_to do |format| format.html # show.html.erb format.json { render json: @book} end end
上記のような自動で生成されるコントローラーでは、
http://localhost:3001/books/1.json
{"author":"aaa","created_at":"2013-01-04T07:49:50Z","id":1,"price":1000,"title":"aaa","updated_at":"2013-01-04T07:49:50Z"}
jsonに独自メソッドは出てきません。
そこでコントローラーを、
# GET /books/1 # GET /books/1.json def show @book = Book.find(params[:id]) respond_to do |format| format.html # show.html.erb format.json { render json: @book, :methods => [:price_with_tax]} end end
上記のようにjsonないしxmlに:methodsオプションで該当の独自メソッドを追加してあげると、
{"author":"aaa","created_at":"2013-01-04T07:49:50Z","id":1,"price":1000,"title":"aaa","updated_at":"2013-01-04T07:49:50Z","price_with_tax":1050.0}
出てきた!
これはActiveRecordのto_jsonないしto_xmlメソッドの、
オプションですので、
1.9.3-p194 :001 > book=Book.find(1) Book Load (5.7ms) SELECT "books".* FROM "books" WHERE "books"."id" = ? LIMIT 1 [["id", 1]] => #<Book id: 1, title: "aaa", author: "aaa", price: 1000, created_at: "2013-01-04 07:49:50", updated_at: "2013-01-04 07:49:50"> 1.9.3-p194 :003 > book.to_json => "{\"author\":\"aaa\",\"created_at\":\"2013-01-04T07:49:50Z\",\"id\":1,\"price\":1000,\"title\":\"aaa\",\"updated_at\":\"2013-01-04T07:49:50Z\"}" 1.9.3-p194 :002 > book.to_json :methods => [:price_with_tax] => "{\"author\":\"aaa\",\"created_at\":\"2013-01-04T07:49:50Z\",\"id\":1,\"price\":1000,\"title\":\"aaa\",\"updated_at\":\"2013-01-04T07:49:50Z\",\"price_with_tax\":1050.0}" 1.9.3-p194 :004 >
このようにも可能!です!見にくっ!
CoffeeScriptでsetTimeoutを書く
超ピンポイントトピックですが、迷ったので、、
setTimeout ->
console.log("ok")
, 1000
改行+インデント揃えてからのカンマ+ミリ秒だそうですー。
ありがとうございます!
bundle installでproduction環境のgemはいれないようにする
bundle install --without production
だ!
newgemで新しくgemを作ろうとしたら、`to_specs': Could not find rubyforgeで怒られた
`to_specs': Could not find rubyforge (>= 0) amongst [RedCloth-4.2.9, activesupport-2.3.14, hoe-3.4.0, newgem-1.5.3, rake-10.0.3, rubigen-1.5.8, syntax-1.0.0] (Gem::LoadError)
こんな感じで怒られてしまうので、
gem install rubyforge
rubyforgeもインストールするのを忘れずに!
cloudfoundryで削除リンクを押してもshowアクションに行ってしまう(GETになってしまう)
発生。
gem 'cloudfoundry-jquery-rails'
を
とりあえず外すと大丈夫になりましたが、
副次的に使えなくなった機能が出たかはまだ不明。
原因は調査します。※いずれ暇なとき
2012年8月1日現在のHerokuのアドオンにあるデータストア(データベース)一覧
the data stores in heroku add-ons
- Amazon RDS (MySQL, Oracle, SQL Server)
- Cassandra.io (Cassandra)
- database.com
- Heroku Postgres (postgreSQL)
- JustOneDB - NewSQL Cloud Database (postgreSQL compatible)
- MongoHQ (MongoDB)
- MongoLab (MongoDB)
- openredis (Redis)
- Redis To Go (Redis)
いろいろ増えました。
データオブジェクト(データの種類やカテゴリ)に合わせて、
格納すべきデータストアも選んでいきたいところです。
rvmそのものをupdateする方法
rvmで1.9.3-p125を入れようとしたのに、
rvm list known | grep 1.9.3
で出てこなくてなんでーって思ってて、
rvmそのもののupdate的なものがあるのかなーと思ったら、ありました。
rvm get {stable|latest|x.y.z|head|master|branch|help} [--auto]
でてきたー!
[ruby-]1.9.3-preview1 [ruby-]1.9.3-rc1 [ruby-]1.9.3-p0 [ruby-]1.9.3-p125 [ruby-]1.9.3[-p194] [ruby-]1.9.3-head