2012-08-09 62 views
4

我有一個'run'對象,裏面可以容納很多'圖層'。運行接受圖層的嵌套屬性,但在各種不良事件發生之前,導軌無法確保嵌套對象的參數有效。我試圖檢查'deposition_source_id'參數在任何圖層上是否爲空。我怎樣才能遍歷圖層?
該行可以從一個或任何層獲取參數。 「0」指定圖層。
params[:run][:layers_attributes]["0"][:deposition_source_id]如何循環控制器中的一些嵌套參數? Rails 3

如何檢查每一層?這些參數:

=> {"utf8"=>"✓", 
"_method"=>"put", 
"authenticity_token"=>"T+X6sSda5vV19hpMZEAdf5RWSKPhJrm/q9+NXxTC5G8=", 
"run"=> 
    {"number"=>"31310.0", 
    "start_time_string"=>"08/08/2012 at 11:08 AM", 
    "system_id"=>"4", 
    "technician_id"=>"4", 
    "duration"=>"", 
    "base_pressure"=>"", 
    "platters"=>"Apples", 
    "overcoats_string"=>"", 
    "planetary"=>"", 
    "layers_attributes"=> 
    {"0"=> 
     {"deposition_source_id"=>"", 
     "material_id"=>"60", 
     "lot_id"=>"118", 
     "thickness_goal"=>"32", 
     "measured_thickness"=>"3", 
     "tooling_factor"=>"", 
     "sensor_number"=>"", 
     "xtal_life"=>"", 
     "release_agent"=>"0", 
     "_destroy"=>"false", 
     "id"=>"3401"}}}, 
"commit"=>"Update Run", 
"action"=>"update", 
"controller"=>"runs", 
"id"=>"2319"} 

回答

6

你可以做這樣的事情:

params[:run][:layers_attributes].each do |layer_number, params| 
    # do your validation here on params[:deposition_source_id] 
end 

如果你想要做的就是確保deposition_source_id總是空的,我會做這種方式:

deposition_source_id_is_empty = true 
params[:run][:layers_attributes].each do |layer_number, params| 
    if params[:deposition_source_id].present? 
    deposition_source_id_is_empty = false 
    break 
    end 
end 
if deposition_source_id_is_empty 
    # do the things you'd do here if the parameters pass validation 
end 
+0

這和寫作一模一樣!謝謝。我會更頻繁地出現堆棧溢出。 – light24bulbs 2012-08-09 17:30:30