Rubyのアクセッサについての認識

attr_accessor

rubyにおけるインスタンス変数へのアクセッサということで、何となくインスタンス変数を明示的に定義しないといけないのかなと理解してた。

 class Hoge 

     attr_accessor :a, :b

     def initialize()

         @a, @b = 0, 1

     end

 end

C#的には、こんな感じかな

 class Hoge {

     private int a, b;

     public int A {

         get {return a;}

         set {a = value;}

     }

     public int B {

         get {return b;}

         set {b = value;}

     }

      public Hoge() { A = 0; B = 0; }

 }

 

だけど、当然、省略して、こういうのも有効なのね。

class Hoge 

    attr_accessor :a, :b

 def initialize()

        self.a = 0

        self.b = 1

    end

end

 

C#

 class Hoge {

     public int A { get; set; }

     public int B { get; set; }

     public Hoge { A = 0; B = 1; }

 }

 

rails3忘備録

ActiveRecord

・validatesのlength検証で検証内容inはwithinと書いてもOK

    validates :bio, length: { within: 0..255 }

・alias_attributeは属性のaliasを作成

    # authentication_token -> private_token(alias)

    alias_attribute :private_token, :authentication_token

・よく利用する条件式にscopeで名前を付ける

    # where(admin:  true)にadminsという名前を付ける

    scope :admins, where(admin:  true)

    # lambda式を使用すると名前付きscopeにパラメータを設定できる

    scope :not_in_project, lambda { |project|  where("id not in (:ids)",

      ids:  project.users.map(&:id) ) }

    

 

JavaScriptのクラスについて

目下勉強中のJavaScriptのクラスについて備忘録

 

JavaScriptのクラスは、Functionオブジェクトがその役割を担っているので、

 var MyClass = function() {

     // これがコンストラクタ

 }

 var o = new MyClass();

こんな感じでクラスを定義してインスタンス化する。

 

インタフェースというか公開するメソッドは、コンストラクタ内でプロパティに関数オブジェクトを代入することで定義する。

 var MyClass = function() {

     // これがコンストラクタ

    

     this.hoge = function() {

         // これが公開するメソッド

     }

 }

 

公開しない、いわゆるprivateなメソッドは、コンストラクタ内でローカル変数に関数オブジェクトを代入することで定義する。

 var MyClass = function() {

     // これがコンストラクタ

    

     this.hoge = function() {

         // これが公開するメソッド

     }

 

     var.private_hoge = function() {

         // これがprivateなメソッド

     }

 }

 

同様に、コンストラクタ内でfunction命令で関数を定義しても非公開関数を作れる。

これは、あるオープンソースのコードで使われていたやり方なんだけど、

このやり方の意味と目的については、書籍やgoogle先生では確認できてないので、

上記は、あくまでも結果から推測した解釈。

 var MyClass = function() {

     // これがコンストラクタ

    

     this.hoge = function() {

         // これが公開するメソッド

     }

 

     var.private_hoge = function() {

         // これがprivateなメソッド

     }

 

     function func_hoge() {

         // これもprivateなメソッド

     }

 }

 

Rails3 覚書2

attr_accessible(*attributes) public

指定された属性以外は、new(attributes)、attributes=(attributes)、update_attribeutes(attributes)で更新されないようにガードする機構

更新するためには、accessor=で明示的に代入する必要がある。

class Customer < ActiveRecord::Base
    attr_accessible :name, :nickname
  end

  customer = Customer.new(:name => "David", :nickname => "Dave", :credit_rating => "Excellent")
  customer.credit_rating # => nil
  customer.attributes = { :name => "Jolly fellow", :credit_rating => "Superb" }
  customer.credit_rating # => nil

  customer.credit_rating = "Average"
  customer.credit_rating # => "Average"

 

assign_attributes(new_attributes, options = {}) public

ロール名でガードをかけたattr_accessibleを使用することができる。

without_protectionオプションがtreuの場合は、ノーガード戦法

class User < ActiveRecord::Base
  attr_accessible :name
  attr_accessible :name, :is_admin, :as => :admin
end

user = User.new
user.assign_attributes({ :name => 'Josh', :is_admin => true })
user.name       # => "Josh"
user.is_admin?  # => false

user = User.new
user.assign_attributes({ :name => 'Josh', :is_admin => true }, :as => :admin)
user.name       # => "Josh"
user.is_admin?  # => true

user = User.new
user.assign_attributes({ :name => 'Josh', :is_admin => true }, :without_protection => true)
user.name       # => "Josh"
user.is_admin?  # => true

MongoDBインストール覚書

Windows版インストール

  • 基本的には、ファイルを解凍して配置するだけ
  • サービスに登録する場合は、以下の手順でインストールする必要あり
   1. 設定ファイルの作成とログ出力パスの設定

echo logpath=C:\mongodb\log C:\mongodb\mongod.cfg

公式マニュアルでは、ログ出力フォルダを指定するように記載されているが、 実際には、ログファイル名まで指定する必要がある。

echo logpath=C:\mongodb\log\mongodb.log > C:\mongodb\mongod.cfg

 

2. インストールコマンド実行

 mongod.exe --config C:\mongodb\mongod.cfg --install

 

3. サービスの実行

 netstartMongoDB 

 

とりあえず以上