Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.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 未定义的方法“[]';零级:零级_Ruby On Rails - Fatal编程技术网

Ruby on rails 未定义的方法“[]';零级:零级

Ruby on rails 未定义的方法“[]';零级:零级,ruby-on-rails,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 错误是 nil:NilClass的未定义方法[] app/controllers/book\u details\u controller.rb:1

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
错误是 nil:NilClass的未定义方法
[]
app/controllers/book\u details\u controller.rb:16:in
creation'


有人知道问题出在哪里吗

您得到的错误是因为
params[:book\u detail]
nil
,并且您正在调用
[:no\u copies]
,即nil。因此它给出以下错误

 undefined method []' for nil:NilClass 
因此,您需要首先检查
params[:book\u 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]
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

除了Salil的答案,您还可以使用
fetch

params.fetch(:book_detail, {})[:no_of_copies]
如果
params[:book\u detail]
nil,则返回
nil
<代码>(1..0)。若要_a
返回一个空数组,以便您可以使用以下命令重写代码

(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]
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

你能在创建内部打印参数[:book_detail]吗?错误信息很清楚-
params
params[:book_detail]
nil
。正如@Dogbert在评论中所说,
params
可以是nilwell@Baboon我不这么认为。除非您显式地将params设置为nil,否则在控制器中,它将始终包含一些值