Ruby on rails 未定义的方法“[]';零级:零级
def创建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
(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,否则在控制器中,它将始终包含一些值