Rubyでdefine_methodで動的にメソッドを作る
こんな感じ
共通部分をまとめるのに便利
( ̄(エ) ̄)彡☆
2014年5月20日火曜日
2014年5月16日金曜日
Rails generate model オプションのparentを使ってみたヘ(^o^)ノ
rails generate modeのparentオプションを調べてみたヘ(^o^)ノ
オブジェクト指向か?と言われると微妙なとこです(;^ω^)
前にこんなモデル設計しました
userには共通項目があって、customer、employeeそれぞれの項目をもっています。
このプロジェクトでは、それぞれのテーブルをリレーションして実装しました
ふりかえって、parentオプションを使ってみます
userモデル typeカラムを追加
customerモデル
employeeモデル
userモデルはこんなの
customerモデルはこんなの
employeeモデルはこんなの
それぞれuserモデルを継承しています
では、employeeモデルにバリデーションを設定しましょう
バリデーションの確認してみましょう
コールバックされましたヘ(^o^)ノ
customerモデルはどうでしょう?
saveできましたねー
userテーブル一つで、各モデルで振る舞いを変更できました
( ̄(エ) ̄)彡☆
オブジェクト指向か?と言われると微妙なとこです(;^ω^)
前にこんなモデル設計しました
userには共通項目があって、customer、employeeそれぞれの項目をもっています。
このプロジェクトでは、それぞれのテーブルをリレーションして実装しました
ふりかえって、parentオプションを使ってみます
userモデル typeカラムを追加
$ rails g model User first_name:string last_name:string \
email:string company:string unit:string type:string
customerモデル
$ rails g model customer --parent user
employeeモデル
$ rails g model employee --parent user
userモデルはこんなの
class User < ActiveRecord::Base end
customerモデルはこんなの
class Customer < User end
employeeモデルはこんなの
class Employee < User end
それぞれuserモデルを継承しています
では、employeeモデルにバリデーションを設定しましょう
class Employee < User validates :working_arrangements, presence: true end
バリデーションの確認してみましょう
コールバックされましたヘ(^o^)ノ
customerモデルはどうでしょう?
saveできましたねー
userテーブル一つで、各モデルで振る舞いを変更できました
( ̄(エ) ̄)彡☆
Rubyのネームスペースヘ(^o^)ノ
Rubyはオープンクラスのメソッドをオーバライドできます。
いわゆるモンキーパッチ〜
便利だけど、すべての振る舞いを変更してしまうので危険(;^ω^)
では、自分で定義したクラスをネームスペースで囲ってみましょう
オーバライドされなくなりましたー
ネームスペースで囲ったときは、10行目のように使用することができますー
( ̄(エ) ̄)彡☆
いわゆるモンキーパッチ〜
便利だけど、すべての振る舞いを変更してしまうので危険(;^ω^)
では、自分で定義したクラスをネームスペースで囲ってみましょう
オーバライドされなくなりましたー
ネームスペースで囲ったときは、10行目のように使用することができますー
( ̄(エ) ̄)彡☆
2014年5月14日水曜日
Rubyのincludeとextendヘ(^o^)ノ
Rubyのincludeとextendの違いについて
つまりはこういうことです
ポイントは32行目と38行目
ancestorsメソッドでご先祖さんを取得しています。
includeしたbarクラスは、barとfooが取得できていますが、
extendしたbuzクラスは、fooが取得できていません。
extendはクラスに定義されるのではなく、
selfの特異メソッドとして定義されるのですねー
間違えてたら教えてw
( ̄(エ) ̄)彡☆
参考
instance method Module#ancestors
instance method Object#singleton_methods
instance method Enumerable#grep
instance method Module#instance_methods
つまりはこういうことです
ポイントは32行目と38行目
ancestorsメソッドでご先祖さんを取得しています。
includeしたbarクラスは、barとfooが取得できていますが、
extendしたbuzクラスは、fooが取得できていません。
extendはクラスに定義されるのではなく、
selfの特異メソッドとして定義されるのですねー
間違えてたら教えてw
( ̄(エ) ̄)彡☆
参考
instance method Module#ancestors
instance method Object#singleton_methods
instance method Enumerable#grep
instance method Module#instance_methods
2014年5月10日土曜日
RubiniusでRubyを学ぶヘ(^o^)ノ
@merborneさんのProcを制する者がRubyを制す(嘘)でrubiniusを知ったw
こいつはRubyの学習にはもってこいと思い、コードリーディングしてみたヘ(^o^)ノ
Arrayクラスのeachがどんな処理をしているのか調べてみる。
コードリーディングにunite-grepを使ってみる。
パターン検索にはagを使います(早いらしい???)
agのインストール
Vimプラグインのunite.vimとvimproc.vimをインストール
unite-grepでagを使いたいので
.vimrc
vimを開いて,gとたたくとこんな感じで検索パターンを入力できる
結果がuniteで表示される
kernel/bootstrap/array.rb:1:class Array ← Enterでファイルを開く
eachメソッドを見てみる
要素の数だけループして、ブロックに要素の値を渡してる
引数にブロックがないときはなんか返してる
to_enumとは
そんな時はctagsヘ(^o^)ノ
rubiniusのルートディレクトリで
さっきのto_enumで<C-]>定義先へ
定義先から戻る場合は<C-o>
( ̄(エ) ̄)彡☆
参考ページ
unite.vimの使い方まとめ
ackを捨てて、より高速なag(The Silver Searcher)に切り替えた
こいつはRubyの学習にはもってこいと思い、コードリーディングしてみたヘ(^o^)ノ
Arrayクラスのeachがどんな処理をしているのか調べてみる。
コードリーディングにunite-grepを使ってみる。
パターン検索にはagを使います(早いらしい???)
agのインストール
$ brew install ag
Vimプラグインのunite.vimとvimproc.vimをインストール
unite-grepでagを使いたいので
.vimrc
" unite grep let g:unite_enable_start_insert = 1 let g:unite_enable_ignore_case = 1 let g:unite_enable_smart_case = 1 nnoremap,g : Unite grep:. -buffer-name=search-buffer nnoremap ,cg : Unite grep:. -buffer-name=search-buffer nnoremap ,r : UniteResume search-buffer if executable('ag') let g:unite_source_grep_command = 'ag' let g:unite_source_grep_default_opts = '--nogroup --nocolor --column' let g:unite_source_grep_recursive_opt = '' endif
vimを開いて,gとたたくとこんな感じで検索パターンを入力できる
結果がuniteで表示される
kernel/bootstrap/array.rb:1:class Array ← Enterでファイルを開く
eachメソッドを見てみる
要素の数だけループして、ブロックに要素の値を渡してる
引数にブロックがないときはなんか返してる
to_enumとは
そんな時はctagsヘ(^o^)ノ
rubiniusのルートディレクトリで
$ ctags -R
さっきのto_enumで<C-]>定義先へ
定義先から戻る場合は<C-o>
( ̄(エ) ̄)彡☆
参考ページ
unite.vimの使い方まとめ
ackを捨てて、より高速なag(The Silver Searcher)に切り替えた
2014年4月28日月曜日
Shinosaka.rb #4を開催しましたヘ(^o^)ノ #shinosakarb
Shinosaka.rb #4を開催しましたーヘ(^o^)ノ
今回はペアプロ!
僕のWiMAXが圏外なので、あきらめていたら...
iceさんがここならつながる!
無事つながりましたw
なのでペア決めスクリプト作った⇒make_pair
意外とペアプロ経験者が少なかったなー
ペアプロは「精神と時の部屋」と冒頭に断言しましたw
どうだったかな?
【お題】
1問目 FizzBuzz
2問目 ボーリングのスコア計算
ボーリングのスコア計算がわからない人がいるのは意外だった...
準備不足でした...(;・∀・)
皆さんのコードはこちら
2次会で数名を朝帰りさせてしまいました。
反省...( TДT)ゴメンヨー
来月も懲りずに開催するので、みなさん参加してくださいねー
でわ( ̄(エ) ̄)彡☆
今回はペアプロ!
僕のWiMAXが圏外なので、あきらめていたら...
iceさんがここならつながる!
無事つながりましたw
「はーいみんな2人づつペア作ってー」←呼び起こされるトラウマ
— tiken (@kytiken_code) 2014, 4月 6
なのでペア決めスクリプト作った⇒make_pair
意外とペアプロ経験者が少なかったなー
ペアプロは「精神と時の部屋」と冒頭に断言しましたw
どうだったかな?
【お題】
1問目 FizzBuzz
2問目 ボーリングのスコア計算
ボーリングのスコア計算がわからない人がいるのは意外だった...
準備不足でした...(;・∀・)
皆さんのコードはこちら
2次会で数名を朝帰りさせてしまいました。
反省...( TДT)ゴメンヨー
来月も懲りずに開催するので、みなさん参加してくださいねー
でわ( ̄(エ) ̄)彡☆
2014年2月23日日曜日
Shinosaka.rb #2を開催したよーヘ(^o^)ノ
Shinosaka.rb #2を開催したヘ(^o^)ノ
参加費1,500円(゚д゚)!にも関わらず?意識高い皆さんが参加していただきましたー
次回は参加費見直しますw ごめんねー
内容はTDDハンズオン!
スライド
デモでプロ生ちゃんTDDを実践 ⇒ [GitHub]pronama_tdd
RSpecでみなさんと一緒にTDDを実践しました。
ライブコーディングはとっても緊張…(;・∀・)
でも、とても勉強になった。
こういう風に書いた方が良いとか、スペルミスのご指摘などなど
コードレビューの大切さを実感したよ
金井さんのLT
= 準備中 =
@kytiken_codeさんのテストコードをレビュー
Pryこみったーのyui-knkさんのお話。
普段ちょー便利に利用させていただいているPryの便利な使い方を教えていただきましたー
みなさんのこんな便利gemあるよー情報良かった!
知らないものばかり…まだまだですわw
rbenv-gemsetのお話
railsのActiveRecordの便利な機能のお話
Autodocテスト結果をドキュメント化してくれるgem
その中でも…
コレ! git-svn
現場はsvn…
でもgitが使いたい!!!って人はこれ
ヤバいw
知らんかったーΣ(゚д゚lll)
Windowsでも使えるようですね ⇒ http://shinodogg.com/?p=4964
即採用決定ーヘ(^o^)ノ
やっぱり勉強会はいいよー
立ち上げてほんとによかった
次回は3月22日(土)予定です。「初めてのgem(仮)」
是非、参加してくださいねー
参加していただいたみなさん。お疲れ様でしたー( ̄(エ) ̄)彡☆
参加費1,500円(゚д゚)!にも関わらず?意識高い皆さんが参加していただきましたー
次回は参加費見直しますw ごめんねー
内容はTDDハンズオン!
スライド
デモでプロ生ちゃんTDDを実践 ⇒ [GitHub]pronama_tdd
RSpecでみなさんと一緒にTDDを実践しました。
ライブコーディングはとっても緊張…(;・∀・)
でも、とても勉強になった。
こういう風に書いた方が良いとか、スペルミスのご指摘などなど
コードレビューの大切さを実感したよ
金井さんのLT
= 準備中 =
@kytiken_codeさんのテストコードをレビュー
Pryこみったーのyui-knkさんのお話。
普段ちょー便利に利用させていただいているPryの便利な使い方を教えていただきましたー
みなさんのこんな便利gemあるよー情報良かった!
知らないものばかり…まだまだですわw
rbenv-gemsetのお話
railsのActiveRecordの便利な機能のお話
Autodocテスト結果をドキュメント化してくれるgem
その中でも…
コレ! git-svn
現場はsvn…
でもgitが使いたい!!!って人はこれ
ヤバいw
知らんかったーΣ(゚д゚lll)
Windowsでも使えるようですね ⇒ http://shinodogg.com/?p=4964
即採用決定ーヘ(^o^)ノ
やっぱり勉強会はいいよー
立ち上げてほんとによかった
次回は3月22日(土)予定です。「初めてのgem(仮)」
是非、参加してくださいねー
参加していただいたみなさん。お疲れ様でしたー( ̄(エ) ̄)彡☆
登録:
投稿 (Atom)







