- Ruby on Rails 4.0 勉強会資料 @ slideshare
- 動的なファインダメソッドは非推奨なのか。それにしてもマルチスレッドが駄目だからNode.jsが産まれたんだと思うんだけど、うーん…。
2014/04/20
Rails4で変わったところに関するリンク集
2013/04/17
ヘルパーモジュールの読み込み方の違い
必要がありました。しかし、Rails 2.x 時代になると、application_controller.rb に初めから helper :all が記載されるようになったため、全部読み込みたくない場合だけプログラマー自身が helper :all を削除することになりました。さらに Rails 3.0 で「全部読み込む」がデフォルトになり、そうしたくない場合に clear_helpers を呼ぶという仕様になったのです。実は、次のバージョン 3.1 でまた仕様が変わる予定です。config/application.rb の中で config.action_controller.include_all_helpers = false のように記述すると「全部読み込まない」という振る舞いになります。
(はじめる!Rails3(2)より)
2013/04/12
ヘルパーメソッドrender
def done @tasks = Task.where(:done => true) render :index endRails 2.x では、render :action => ’index’ のように記述する必要がありました。Rails 3 でもこの書き方は有効ですが、より簡潔な記述法が導入されたのです(はじめる!Rails3より)。
form_forの前の等号
2013/04/08
Mongoidを勉強するにあたってのリンク集
そうそう。バージョンがあがったときってぐぐってもバッドノウハウしかヒットしなかったりするんですよね。こういうのまとめてくれてると大変ありがたいです。
mongoid 3.0でreferences_manyなどが廃止 @ deadbeef
references_manyって廃止されてるんだ。ひゃー。
2012/01/02
ブロックへの引数渡し
- プログラミング言語 Rubyより
引数が1個のブロックを宣言すれば、多重代入のルールにより、2個の値が自動的に配列にまとめられるはずだと予想される。しかし、現実にはそのようには動作しないのだ。
- プログラミング言語 Ruby 第2版 150ページ ブロックへの引数渡し
def tow; yield 1,2; end # 2個の値を渡すイテレータ
two {|x| p x} # Ruby 1.8: 警告を発して[1,2]を出力
two {|x| p x} # Ruby 1.9: 警告なしで1を出力
two {|*x| p x} # 両バージョン: 警告なしで[1,2]を出力
two {|x,| p x} # 両バージョン: 警告なしで1を出力
2012/01/01
ブロックと変数のスコープ
- プログラミング言語 Rubyより
囲っているスコープの変数を意図せずに書き換えてしまう場合もある。特に、Ruby1.8のブロックのパラメータでは、この問題が起きやすい。Ruby1.8では、ブロックパラメータが既存の変数と同じ名前だと、ブロックが実行されたときに、新しいブロックローカルな変数が作られるのではなく、既存の変数に値が代入されてしまう。
- プログラミング言語 Ruby 第2版 148ページ ブロックと変数のスコープ
1.upto(10) do |i|
1.upto(10) do |i|
print "{i} "
end
print " ==> Row #{i}\n" # 行番号を出力しているつもりだが、列番号になっている
end
2011/10/05
Enumerator
- プログラミング言語 Rubyより
Ruby 1.8でEnumeratorを使うには、require 'enumerator'が必要だが、Ruby 1.9(及び1.8.7)ではEnumeratorは組み込み済みなので、requireは不要である。
- プログラミング言語 Ruby 第2版 140ページ Enumerator
2011/09/14
2011/08/09
Net::HTTP.version_1_2は何をしているのか
- Ruby 初心者スレッド Part 45より
Net::HTTP の バージョン 1.1 ってのは、太古の昔の ruby 1.6 と呼ばれるものに付属してたやつ
Net::HTTP の バージョン 1.2 は、ruby 1.8 と 1.9 以降の現行に付属してるやつruby 1.6 上で Net::HTTP.version_1_2 と書くと、Net::HTTP の バージョン 1.2 の内部メソッドが使用されるように切り替わる
現行の ruby 1.8 と ruby 1.9 において、Net::HTTP.version_1_2 を起動させる必要はまったくない
ruby 1.8 上で Net::HTTP.version_1_1 と書くと、Net::HTTP の バージョン 1.1 の内部メソッドが使用されるように切り替わる
まあ、誰も解説しないのも良くないんだけど、誰もソース読まないのも正直どうかと思う- Ruby 初心者スレッド Part 45
2011/07/07
クラス変数は直感に反する(1.8)
Ruby1.8のクラス変数は継承されてしまうようです(1.9ではされないように変更)。
一般的に(?)クラス変数という言葉から類推される挙動を求める場合は、クラスインスタンス変数を使います。「クラスのインスタンス変数」と「クラスインスタンス変数」は別物であることに注意。ややこしー。
逆にクラスインスタンス変数を使うと継承で初期化されないというデメリットがある。その場合は次のようにして初期化することができる。
class C
@var = 1
class << self
attr_accessor :var
def inherited(klass)
klass.var ||= var
super
end
end
def disp
self.class.var
end
end
class D < C
end
p D.var # => 1参考
2011/07/06
ruby1.8 / ruby1.9.1をdebianのupdate-alternativesツールで切り替える方法
便利っすー。
どうしてgemは1.9だけ登録してるのかな?と思ったのですが、update-alternatives --display gemをして納得。gem1.8はupdate-alternativesで管理されているのに、gem1.9は管理されてないんですね。なんでなんでしょう...。
追記 2013/04/11:
今はrvm使ってます。
2011/06/18
Fiber と Proc ―― 手続きを抽象化する二つの機能
おぉぉぉぉ!
ネットワーク処理をするメソッドがあって、どうすればうまくメインの処理・ディレイ・処理回数の3つをうまく分離するかわからなかったのですが、これは美しい。Fiberを使ってコルーチンの考え方を導入すれば解決したんですねぇ…。Herokuも1.9使えるし、1.9に移ろうかなぁ。うーん…。
その他のFiberの例:
Ruby勉強会@関西でFiberについて勉強してきた
Fiberを使いやすくする仕掛け