ruby-on-rails - 如何设置局部变量

标签 ruby-on-rails ruby

我正在尝试使用以下方法在基于用户名的回调中创建虚 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/

相关文章:

ruby-on-rails - RSpec:设置请求 header

ruby-on-rails - 你如何在 Rails 中使用 Rspec 测试你的配置/初始化脚本?

ruby-on-rails - 有条件地链接范围的最佳方法

javascript - AngularJS、Rails 和 ui-router 不显示模板

ruby-on-rails - Gem 安装 ruby​​-audio 失败

ruby-on-rails - CSS 中的 Rails 路由

ruby-on-rails - Mongoid:从 Moped::Errors 获取 mongo 错误代码

ruby - 使用 body_stream 和参数发布请求

ruby-on-rails - 为共享样式表创建一个 gem 并在 Rails 应用程序中使用它

ruby - 使用 prime256v1 和已知公钥创建新的 OpenSSL EC 点