ラベル バージョンでの違い の投稿を表示しています。 すべての投稿を表示
ラベル バージョンでの違い の投稿を表示しています。 すべての投稿を表示

2014/04/20

Rails4で変わったところに関するリンク集

Ruby on Rails 4.0 勉強会資料 @ slideshare
動的なファインダメソッドは非推奨なのか。それにしてもマルチスレッドが駄目だからNode.jsが産まれたんだと思うんだけど、うーん…。

2013/04/17

ヘルパーモジュールの読み込み方の違い

ヘルパーモジュールの読み込み方に関しては少し複雑な歴史があります。Rails 1.x の時代には application_helper.rb とコントローラに対応したヘルパーモジュールが読み込まれました。全部読み込みたい場合は application_controller.rb に helper :all と記述する
必要がありました。しかし、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
end
Rails 2.x では、render :action => ’index’ のように記述する必要がありました。Rails 3 でもこの書き方は有効ですが、より簡潔な記述法が導入されたのです(はじめる!Rails3より)。

form_forの前の等号

<%= form_for @task do |form| %>
Railsで2.3までは等号を書くとエラーになりましたが、Rails3.0ではここに等号を書かないとログに警告が出力されます。Rails3.1で等号なしの書き方は廃止される予定です。(はじめる!Rails3より)
はじめる! Rails3(1)

2013/04/08

Mongoidを勉強するにあたってのリンク集

mongoid2 を mongoid3 にあげてみた @ sonotsのblog
そうそう。バージョンがあがったときってぐぐってもバッドノウハウしかヒットしなかったりするんですよね。こういうのまとめてくれてると大変ありがたいです。

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/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 上で Net::HTTP.version_1_1 と書くと、Net::HTTP の バージョン 1.1 の内部メソッドが使用されるように切り替わる

現行の ruby 1.8 と ruby 1.9 において、Net::HTTP.version_1_2 を起動させる必要はまったくない
まあ、誰も解説しないのも良くないんだけど、誰もソース読まないのも正直どうかと思う

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ツールで切り替える方法

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 ―― 手続きを抽象化する二つの機能

Fiber と Proc ―― 手続きを抽象化する二つの機能
おぉぉぉぉ!
ネットワーク処理をするメソッドがあって、どうすればうまくメインの処理・ディレイ・処理回数の3つをうまく分離するかわからなかったのですが、これは美しい。Fiberを使ってコルーチンの考え方を導入すれば解決したんですねぇ…。Herokuも1.9使えるし、1.9に移ろうかなぁ。うーん…。

その他のFiberの例:
Ruby勉強会@関西でFiberについて勉強してきた
Fiberを使いやすくする仕掛け