我正在尝试使用以下方法在基于用户名的回调中创建虚 url:
before_create :generate_vanity_url
def generate_vanity_url
vanity_url = self.name
vanity_url.gsub!(/[^\w]/,"")
end
出现的问题是,不仅变量 vanity_url 会受到 gsub 的影响!方法,但名称属性也是如此。我做错了什么?
附言。该方法更为广泛,但为了清楚起见,我已将其缩短
最佳答案
你不必使用.dup
,只是不要使用.gsub!
.gsub!
是一种破坏性方法,意味着它修改了原始方法。.gsub
是无损的,不修改原件
是的,像这样的东西应该可以解决问题
before_create :generate_vanity_url
def generate_vanity_url
@vanity_url = self.name.gsub /[^\w]/, ""
end
此外,\W
与 [^\w]
相同,所以请改为这样做
before_create :generate_vanity_url
def generate_vanity_url
@vanity_url = self.name.gsub /\W/, ""
end
~ % pry
[1] pry(main)> str = "hello world"
=> "hello world"
[2] pry(main)> str.gsub /o/, "a"
=> "hella warld"
[3] pry(main)> str
=> "hello world"
[4] pry(main)>
关于ruby-on-rails - 如何设置局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17475540/