我有這個Javascript函數,我用它來追加元素做我的表單。提交表單時,所有元素都以params形式傳入。檢查參數是否通過
這是問題所在。我的函數附加的元素是哈希的一部分。這基本上起到軌道「嵌套屬性」的作用。
所有似乎工作正常,除非其中一個「哈希」是空的。當我從集合中刪除所有元素時,哈希參數不會傳遞給控制器。
實施例(想象使用我JS函數所附本田,豐田,現代)
汽車 [本田] [豐田] [現代]
這是散列如何設置在JS功能(我每次點擊「添加」時間):
如果我提交表單,該值將被作爲哈希傳遞到這樣的控制器:
cars_hash=>{tmp_cars=>"{"1"=>{car_brand=> "honda"},"2"=>{car_brand=> "toyoda"},"3"=>{car_brand=> "hyundai"}"}
但是,如果我決定從哈希中刪除所有這些值(使用刪除按鈕,它也具有在JS函數中聲明的功能)並提交表單,哈希甚至不會作爲參數存在。然後,當我到達我的控制器,我嘗試填充我使用迭代變量/插入我的DB:
控制器
cars_hash = params[:cars_hash][tmp_cars]
它給我這個錯誤:
undefined method `[]' for nil:NilClass
我明白,這個參數並不存在,所以它基本上是零。我試過所有這些可能的選擇:
if not params[:cars]["tmp_cars"].blank?
if not params[:cars]["tmp_cars"].empty?
if params[:cars]["tmp_cars"].present?
if params[:cars]["tmp_cars"] != nil
但沒有運氣。任何人都可以建議我一種方法來讓這個工作?再說一遍,如果散列值是一個值,參數將不會爲零。爲了有一個值,必須通過JS函數將一個元素附加到文檔中。
你的控制器裏有什麼? –
我添加了一行給我的錯誤@Baloo –
你的方法正在檢查'params [:cars]'是否基本存在。聽起來你想檢查是'params [:cars] [tmp_cars]'。你嘗試過'params [:cars] .has_key?(tmp_cars)'? – Zhihao