【问题标题】:adding array.each to variable gives no method for "+" for nil (!?) method in Rails将array.each添加到变量中没有为Rails中的nil(!?)方法提供“+”的方法
【发布时间】:2013-02-13 16:35:12
【问题描述】:

我正在研究我的研究项目,但在将一些数据从数组中提取到变量时遇到了问题。

    m_id = params[:m_id]    #from the search form

    headers  = {:accept => "application/json"}
    response = RestClient.get "http://api.themoviedb.org/3/movie/#{m_id}?api_key=8f8bdc43aaf51d09127c3eb023007a53", headers     
    parsed_json = JSON.parse(response)

    movie_act = Movie.new
    parsed_json["production_countries"].each { |e| movie_act.country += e["name"] }

以及代码

    movie_act.country = parsed_json["production_countries"][0]["name"].to_s

没关系(尽管它只提供一个国家,第一个 - 我需要所有国家)。

我得到的错误是:

 NoMethodError in MoviesController#create

 undefined method `+' for nil:NilClass
 Rails.root: C:/Users/Asus/Moje dokumenty/GitHub/interfejs

 Application Trace | Framework Trace | Full Trace
 app/controllers/movies_controller.rb:94:in `block in create'
 app/controllers/movies_controller.rb:93:in `each'
 app/controllers/movies_controller.rb:93:in `create'

有什么问题?请帮忙!

【问题讨论】:

  • 你试过.each { |e| movie_act.country << e["name"] }吗?这意味着movie_act.country 是一个数组

标签: ruby-on-rails arrays methods each null


【解决方案1】:

问题是您在movie_act.country 上调用+=,但movie_act.country 正在返回nil

movie_act.country 应该是什么类型的对象? Array? String?在任何一种情况下,您都可以通过在 .each 循环之前使用空值对其进行初始化来避免此错误,例如(假设您希望它是 Array),

movie_act = Movie.new(:country => [])
parsed_json["production_countries"].each { |e| movie_act.country += e["name"] }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 2020-11-03
    相关资源
    最近更新 更多