Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 任何避免使用gsub的方法!替换_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 任何避免使用gsub的方法!替换

Ruby on rails 任何避免使用gsub的方法!替换,ruby-on-rails,ruby,Ruby On Rails,Ruby,我在问题中运行,我使用了以下代码 def replace_variables(url, project) variables = define_variables(project) variables.each do |key, value| url.gsub!(key, value_encode(value)) end url end 问题是由于gsub!使用率上升,影响所有数据,我只想在这里更改数据。所以我找到了下面的解决方案,但这并不好

我在问题中运行,我使用了以下代码

  def replace_variables(url, project)
    variables = define_variables(project)
    variables.each do |key, value|
      url.gsub!(key, value_encode(value))
    end
    url
  end
问题是由于gsub!使用率上升,影响所有数据,我只想在这里更改数据。所以我找到了下面的解决方案,但这并不好,任何其他方法都不行。因为变量定义太多。这很好,但似乎是额外的变量定义

  def replace_variables(url, project)
    variables = define_variables(project)
    temp_url = url
    variables.each do |key, value|
      temp_url = temp_url.gsub(key, value_encode(value))
    end
    temp_url
  end
更多解释代码创建一些变量并从url替换它,并更改它的值,但我有一个表单数组,如果首先运行它,它也会更改这些表单的值!这是我不想要的。上面的代码运行良好,但在我定义累加器变量和迭代时看起来很糟糕,是否有其他方法可以优雅地完成它。我有以下定义方法

  def define_variables(project)
    {
        'TODAYS_DATE' => Date.current.to_s,
        'USER_NAME' => username,
        'PROJECT_NAME' => project.name || '',
     
    }
  end
如果
#define_variables
返回一个键/值散列,那么类似的方法应该可以工作

def replace_variables(url, project)
  define_variables(project).inject(url) do |memo, (key, value)|
    memo.gsub(key, value_encode(value))
  end
end

gsub
一起使用结尾处的符号会使字符串本身发生变化。你能提供输入数据和预期输出吗?哦,谢谢,是的,这很有效。