1

次のメソッドを使用して、ユーザーの名前に基づいてコールバックでバニティ URL を作成しようとしています。

before_create :generate_vanity_url

def generate_vanity_url
    vanity_url = self.name
    vanity_url.gsub!(/[^\w]/,"") 
end

発生する問題は、変数 vanity_url が gsub の影響を受けるだけではないということです! メソッドだけでなく、 name 属性も同様です。私は何を間違っていますか?

Ps。この方法はより広範囲ですが、わかりやすくするために短くしています

4

2 に答える 2

3

私の知る限り(これは悪いかもしれませんが)、これはコピーオンライトの結果です。そのようにしてください

vanity_url = self.name.dup
vanity_url.gsub!(/[^\w]/,"")

の簡単な例irb

.dup...なしで

> a = "asdf"
=> "asdf"
> b = a
=> "asdf"
> b.gsub!(/a/, 'q')
=> "qsdf"
> a
=> "qsdf"
> b
=> "qsdf"

...そして.dup

> a = "asdf"
=> "asdf"
> b = a.dup
=> "asdf"
> b.gsub!(/a/, 'q')
=> "qsdf"
> a
=> "asdf"
> b
=> "qsdf"
于 2013-07-04T17:22:56.557 に答える