0

定义创建

(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创建'

有人能说出问题所在吗?

4

2 回答 2

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]
于 2013-08-08T05:43:03.197 回答
0

另外是 Salil 的回答,你可以使用fetch

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

nil如果params[:book_detail]is将返回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
于 2013-08-08T07:58:03.637 回答