akkun_choi pedia
mindia › akkun_choi pedia › 単語

Ruby on Rails

akkun_choi · 2010-02-24 更新 · 3 ポイント · 履歴(11)
第 5 版(2010-02-08 11:44:34 · akkun_choi)を表示しています。 最新版に戻る

現在Javaでは、DIのように疎結合ということがひとつのキーワードとして扱われている。これに対し、Ruby on Railsは密結合のウェブフレームワークだという。

http://journal.mycom.co.jp/articles/2005/08/29/lldn/001.html

密結合なフレームワーク。

テスト

テストデータベースにスキーマをコピー
$ rake db:test:prepare

テスト実行する
$ ruby test/unit/person_test.rb

テスト実行する
$ ruby test/unit/person_test.rb

特定のメソッドのみテスト実行する
$ ruby test/unit/person_test.rb -n test_set_name

fixturesを使う

class PersonTest < ActiveSupport::TestCase
  def test_set_name
    person = persons(:one)
  end
end

fixturesはテンプレートの記法と同じく動的に生成できる。

privateとprotected

privateの意味は、メソッドを関数形式でだけ呼び出せるようにし、 レシーバー形式では呼び出せないようにするという意味です。

class Foo
def test
print "hello\n"
end
private :test
end

http://www.ruby-lang.org/ja/man/html/FAQ_A5E1A5BDA5C3A5C9…

レシーバ?コンテキストのことかな?ようするにprivateは定義内でしか呼び出せないということか。

protectedにするとレシーバーを指定できる。これは同じクラスであれば外からでも呼び出しが可能になることを意味する。

Rubyでは、C++やJavaのprivateと異なり、サブクラスからでもスーパークラスのprivateメソッドを呼ぶことができる。
Rubyにおけるprotectedとprivateの違いは、レシーバが付けられるかどうかであり、サブクラスから呼べるかどうかではない。
privateメソッドにはレシーバを付けられないので、同じクラスの別のインスタンスのprivateメソッドは呼べない。このような場合にprotectedを使用する。

arrayかどうかチェックする

obj.instance_of?(Array)
obj.class == "Array"

レイジーロード

validation.rbにこんなのがあった

    # Returns the Errors object that holds all information about attribute error messages.
    def errors
      @errors ||= Errors.new(self)
    end

これはもしや、レイジーロードパターン?

irb(main):029:0> class Moge
irb(main):030:1>   @@moge = nil
irb(main):031:1>   def self.get
irb(main):032:2>     @@moge ||= Moge.new
irb(main):033:2>   end
irb(main):034:1> end
=> nil
irb(main):035:0> Moge.get()
=> #<Moge:0x1003a3418>
irb(main):036:0> Moge.get()
=> #<Moge:0x1003a3418>

なるほど、いいね。

メモ

履歴

タグ

「Ruby on Rails」タグが付けられた単語

コメント

kani · 2009-10-14

なるほど!
結合の度合いが言語の特性で変わるのは面白いですね。

他の人の「Ruby on Rails」