1

私はこのクラスを持っています:

class User
  include Mongoid::Document
  field :revenues, :type => Integer, :default => nil
  attr_accessible :revenues
  #now method
  def revenues
   return 1
  end
end

コンソールで1代わりに取得するのはなぜnilですか?

1.9.3-p125 :002 > u.revenues
 => 1 

メソッドとフィールド、どちらが優先されますか?フィールドと同じ機能を持つメソッドを作成するにはどうすればよいですか?

4

1 に答える 1

0

fieldマクロは Mongoid::Document で定義されています。これは、Ruby や Rails の構文機能ではありません。

コードで何が起こっているかは次のとおりです。

  1. このfield関数はいくつかのメソッドを作成します。そのうちの 1 つが と呼ばれrevenuesます。
  2. という別のメソッドを作成するとrevenues、以前に定義されたメソッドが事実上上書きされるため、そのメソッドは役に立たなくなります。

簡単な答え: Mongoid についての zip はわかりませんが、 という名前のメソッドを再度定義した後でも、フィールドがまだ存在する可能性がありますrevenuesmyUser.revenues唯一の欠点は、もう呼び出してアクセスできないことです。

テストをしてみてください: 表記法some_user[:revenues]でフィールドにアクセスして、何が起こるか見てみましょう :)

よろしくお願いします

于 2012-11-21T15:29:23.833 に答える