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
创建'
有人可以说出问题是什么吗?
答案 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]
如果nil
为params[: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