0

我想从我的另一个站点解析一些项目。当我添加一个字符串

t.body["Some text"] = "Other text"

替换正文中的一些文本,出现错误:

IndexError in sync itemsController#syncitem

string not matched

lib/sync_items.rb

require 'net/http'
require 'json'
require 'uri'


module ActiveSupport
  module JSON
    def self.decode(json)
      ::JSON.parse(json)
    end
  end
end
module SyncItem
  def self.run

   uri = URI("http://example.com/api/v1/pages")
   http = Net::HTTP.new(uri.host, uri.port)
   request = Net::HTTP::Get.new(uri.request_uri)
   response = http.request(request)

   parsed_response = JSON.parse(response.body)
     parsed_response.each do |item|
      t = Page.new(:title => item["title"], :body => item["body"], :format_type => item["format_type"])     
      t.body["Some text"] = "Other text"    
      t.save
   end
  end    
end

我究竟做错了什么?

4

1 回答 1

5

t.body现在是一个字符串对象。

要替换字符串中所有出现的某些文本,请使用gsubgsub!

t.body.gsub!("Some text", "Other text")

添加

为了回复 toro2k 关于为什么会出现这种错误的评论,我检查并了解到,[]如果这样的字符串不存在,使用替换字符串中的某些内容将输出“索引错误”

s = 'foo'

s['o'] = 'a'
#=> 'fao' Works on first element

s.gsub('o', 'a')
#=> 'faa' Works on all occurence

s['b'] = 'a'
#=> IndexError: string not matched. (Non-existing string will bring such error)

s.gsub('b', 'a')
#=> nil (gsub will return nil instead of exception)
于 2013-08-27T11:57:12.277 回答