4

その中に多くの「レイヤー」を保持できる「実行」オブジェクトがあります。Runsはレイヤーのネストされた属性を受け入れますが、railsは、あらゆる種類の悪いことが起こる前に、ネストされたオブジェクトのパラメーターが有効であることを確認できません。'deposition_source_id'パラメーターがいずれかのレイヤーで空であるかどうかを確認しようとしています。どうすればレイヤーをループできますか?
この行は、1つまたは任意のレイヤーからパラメーターを取得できます。「0」はレイヤーを指定します。
params[:run][:layers_attributes]["0"][:deposition_source_id]

すべてのレイヤーを確認するにはどうすればよいですか?これらはパラメータです:

    => {"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"}
4

1 に答える 1

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
于 2012-08-09T17:06:20.383 に答える