ruby - 为什么我在此 Ruby 代码中收到 NoMethodError?

标签 ruby methods sinatra

我试图弄清楚为什么在运行这部分代码时出现此错误:在“clean_up_keywords”中:“gsub”的未定义方法为 nil:NilClass (NoMethodError) 但是,当我使用 Sinatra 运行完整代码时,没有出现任何错误。

部分代码:

def clean_up_keywords(str)
  str.gsub("\n", ",").delete("\r").split(',')
end

def clean_up_list(arr)
  arr.reject(&:empty?).each(&:lstrip!)
end

def make_strings_url_friendly(arr)
  arr.each do |e|
    e.gsub!(" ", "+")
  end
end

def make_urls(arr)
  arr.map {|e| "http://www.google.com/search?num=100&q=" + e}
end


  params = Hash.new#test
  params["keyword"] = "red\r\nblue\r\ngreen"
  params["url"] = "http://url.com"
  dirty_list = clean_up_keywords(params[:keyword])
  clean_list = clean_up_list(dirty_list)
  url_ready_list = make_strings_url_friendly(clean_list)
  url_list = make_urls(url_ready_list)

在 Sinatra 中使用的完整代码:

require 'sinatra'
require 'rspec'
require 'nokogiri'
require 'open-uri'

get '/serp_checker' do
  "<form action='/ranked' method='post'>
  <label for='keyword'>Keyword</label>
  <textarea name='keyword' id='keyword' type='text' /></textarea>
  <label for='url'>URL</label>
  <input name='url' id='url' type='text' />
  <input type='submit' value='Go!' />
  </form>"
end

def clean_up_keywords(str)
  str.gsub("\n", ",").delete("\r").split(',')
end

def clean_up_list(arr)
  arr.reject(&:empty?).each(&:lstrip!)
end

def make_strings_url_friendly(arr)
  arr.each do |e|
    e.gsub!(" ", "+")
  end
end

def make_urls(arr)
  arr.map {|e| "http://www.google.com/search?num=100&q=" + e}
end

post '/ranked' do
  #params = Hash.new#test
  #params["keyword"] = "red\r\nblue\r\ngreen"#test
  #params["url"] = "http://url.com"#test
  #serp = Nokogiri::HTML(open("http://www.google.com/search?num=100&q=house"))
  #puts serp.to_s
  dirty_list = clean_up_keywords(params[:keyword])
  clean_list = clean_up_list(dirty_list)
  url_ready_list = make_strings_url_friendly(clean_list)
  url_list = make_urls(url_ready_list)
end

最佳答案

你定义了params["keyword"]但是访问了params[:keyword],所以它返回了nil,因为它不能找到 - 符号和字符串是作为键的不同对象。

解决方法是使用类似 http://as.rubyonrails.org/classes/HashWithIndifferentAccess.html 的东西

关于ruby - 为什么我在此 Ruby 代码中收到 NoMethodError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6015980/

相关文章:

mysql - 是否需要在 Ruby on Rails 中迁移数据库?

ruby-on-rails - Algolia 搜索 - 无法在本地重建索引

Ruby CSV - 获取当前行/行号

ruby - 如何为方法动态创建参数?

ruby-on-rails - 如何在 Heroku 上提供嵌套的静态内容?

ruby-on-rails - 通过连接到 Ruby on Rails 应用程序更新主机名?

android - 如何从 AsyncTask 查询另一个 Activity 中的游标?

scala - 为什么 circe `or` 函数(显然是一元函数)与需要二元操作的 reduceLeft 一起工作?

ruby - 将json数据导入redis

ruby - 未定义哈希方法 `to_i'