第9回Rails勉強会@東北
今回も参加しました。
今回のセッションは3つ。
- hmoriさんによるjMaki
- xibbarによるRubyとActiveSupportを深く
- id:yuichi_katahiraさんによる日程調整アプリを作ろう
以上でした。
jMaki
jMakiですが、ちょっとだけわかった気はするのですが、
やっぱりjavascriptを読みたい気がしました。理解が浅かったです。
すみません。どうなんだろ。主流になったらやりますけど。
現状はうーむ。
日程調整アプリ
今回は結構進めましたね。よかったのではないでしょうか。
ただ、これでブログを書いている人が本家を追い越してしまったのは笑った。w
RubyとActiveSupport
私が進めたので、深く書きます。
まず、スライドですが、slideshareにあげました。
ただ、9枚しかないですし、解説はトークだったので深くはありません。
id:monyakataさんは楽しかったと言っていますが、
本人は楽しかったけど、hmoriさんとquintiaさんの質問と解答にタジタジでした。
やっていて印象的だったのが
def name=(str) @name=str end
hmori:のname=の=ってなんですか?
メソッド名の一部ですよ
hmori:えーまじ!キモー!!
と
class UsersController < ActionController in_place_edit_for :user,:name end
rubyはクラスを定義した時にクラスメソッドを実行することが出来て、
このin_place_edit_forはクラスメソッドなんですよ。
quintia:うわー!そうだったのかー。
でした。さらに掘り進めると、
def in_place_edit_for(object, attribute, options = {}) define_method("set_#{object}_#{attribute}") do @item = object.to_s.camelize.constantize.find(params[:id]) @item.update_attribute(attribute, params[:value]) render :text => @item.send(attribute).to_s end end
とin_place_edit_forは定義されていて、この中で上の例だと
define_methodによってset_user_nameというメソッドが動的に定義されます。
これにより、postを受けることができるというわけです。
define_methodは次回もやりましょう。
次回以降は
- define_method
- 匿名メソッド
- eval
- instance_eval
- class_eval
- module_eval
- rubyのイテレータとブロック
- クロージャ
- procとlambda
- send
- included
- extend
あたりをやって行こうと思います。シリーズになりそうですね。
さらにメモ
- クラスメソッドをmix-inする方法