未定义的方法`[]'为nil:NilClass

时间:2013-08-08 05:31:07

标签: ruby-on-rails

def创建

(1..params[:book_detail][:no_of_copies].to_i).each do |i|

  logger.info "nnnnnnnnnnn#{i}"
  @book_details= BookDetail.new(params[:book_detail])
  @book_details.save
end

错误是 未定义的方法[]' for nil:NilClass app/controllers/book_details_controller.rb:16:in创建'

有人可以说出问题是什么吗?

2 个答案:

答案 0 :(得分:2)

您收到的错误是因为params[:book_detail]nil,而您正在调用[:no_of_copies],即nil。因此它会出现以下错误

 undefined method []' for nil:NilClass 

因此,您需要首先检查params[:book_detail]是否存在,如下所示

(1..params[:book_detail][:no_of_copies].to_i).each do |i|    
  logger.info "nnnnnnnnnnn#{i}"
  @book_details= BookDetail.new(params[:book_detail])
  @book_details.save
end if params[:book_detail] && params[:book_detail][:no_of_copies]

答案 1 :(得分:0)

此外是Salil的回答,您可以使用fetch

params.fetch(:book_detail, {})[:no_of_copies]
如果nilparams[:book_detail]

将返回nil(1..0).to_a返回一个空数组,以便您可以使用以下

重写代码
copies = (params.fetch(:book_detail, {})[:no_of_copies] || 0).to_i

(1..copies).each do |i|    
  logger.info "nnnnnnnnnnn#{i}"
  @book_details= BookDetail.new(params[:book_detail])
  @book_details.save
end