2012-04-30 16 views
3

私はRuby on Rails v3.2.2を使用していますが、受信者オブジェクトではなくインスタンス属性でメソッドを "直接"呼び出すことを望みます。私はオブジェクト属性に「直接」作用するメソッドを実装する方法は?

# Note: 'is_correct?' and 'has_char?' are just sample methods. 
@user.name.is_correct? 
@user.surname.has_char?('V') 

ような何かを書くことができるように、私はname属性に「直接」行動するメソッドを実装することができるだろう@user

@user.name 
# => "Leonardo da Vinci" 

ためUserインスタンスを持っている場合つまり、出来ますか?もしそうなら、どうしたらいいですか?

注::プラグインを実装しようとしています。

答えて

3

これを行うには、属性ごとに特別な種類のクラスを使用する必要があります.IMHOは、理由が純粋にビジュアルスタイルに関係していると仮定すると、非常に過剰です。

たとえば、@user.nameStringを返しますので、デフォルトではStringクラスに属するメソッドのみを呼び出すことができます。追加のメソッドを呼び出す場合は、Stringのサブクラスを使用するか、または特定のインスタンスにStringのシングルトンメソッドを追加します。私はそれが混乱し、一貫性がなく、実際の進歩の道に迷い込んでいると思います。

より良い解決策はただのようなもの依頼することです:

@user.surname.include?('V') 
0

私はちょうどlilのを果たし、それを得た:has_char?('V')については

@user.valid?(:name) 

を、あなたはすでにStringのインスタンスとそれを行うことができます通常のクラスでシングルトンメソッドを使用して作業していますが、あなたのケースで同じことを実行できるかどうかはわかりません。疑わしい!しかし、ここに私は何を持っているのですか?

class Bar 

    def initialize foo 
    @foo = foo 
    def @foo.bar 
     p "baaaaaaar" 
    end 
    end 

    def foo 
    @foo 
    end 

    def foo=(foo) 
    @foo = foo 
    def @foo.bar 
     p "baaaaaaar" 
    end 
    end 
end 

a = Bar.new "foo" 
p a.foo 
p a.foo.bar 
a.foo = "bar" 
p a.foo.bar 
# >> "foo" 
# >> "baaaaaaar" 
# >> "baaaaaaar" 
# >> "baaaaaaar" 
# >> "baaaaaaar" 
関連する問題