まず、コードは次のとおりです: http://pastie.org/5448967
さて、シナリオは次のとおりです。私はプロジェクト オブジェクトを持っています。添付バッチについては、まだ解決策を実装していないので心配する必要はありません。分析のオプションが設定されている分析要求が関連付けられています。つまり、ユーザーが選択できる分析のテーブルがあり、選択された各分析に対して、分析をプロジェクトにリンクする分析要求が作成されます。
問題は次のとおりです。分析リクエストを更新しようとすると、最初に気付くのは、フォームのパラメーターが期待どおりに「ハッシュ」されていないことです。
ここに私が欲しいものがあります:
params={:projects=>{"#{project_id}"=>{project_attribute, project_attribute, etc..., analysisrequests=>[array,of,analysis,ids]}, "#{project_id}"=>{project_attribute, project_attribute, etc..., analysisrequests=>[array,of,analysis,ids]}, ...}
これが私が得るものです:
{"utf8"=>"✓", "_method"=>"put", "authenticity_token"=>"XfIr7zfVNdlg5HS3Letw4sI/MGNFTtqntQYrgjAh9TY=", "project"=>{"1832"=>{"project_number"=>"261", "nof_samples"=>"5", "analysisrequest"=>{"analysis_id"=>["", "8",
"12"]}}, "status_id"=>"13", "rush_service"=>"0", "customer_id"=>"111", "project_notes"=>"test", "sample_desc"=>"test", "user_id"=>"1", "quoted_price"=>"1", "1834"=>{"project_number"=>"777", "nof_samples"=>"1", "analysisrequest"=>{"analysis_id"=>["", "3", "9", "20", "22"]}}}, "commit"=>"Submit Changes"}
明白なことを述べてください:私はorに変更"analysisrequest"=>{"analysis_id"=>["", "8", ...]}
することについてあまり心配していません(sに注意してください)。実際、プロジェクトに関連付けられた各リクエストの複数選択ではなく、単一の複数選択をフォームにレンダリングするためにこれを行いました(「s」を追加するとそうなります)-「analysis_id」ネストは問題なく、各リクエストが持つ可能性があることがわかるので、Railsがその仕事をしていることは明らかです."analysisrequest"=>["", "8", ...]
"analysisrequests"=>[]
"analysisrequest"=>{"analysis_id"=>[],"project_id"=>[]}
私の懸念の中で最も重要なのは、ハッシュの最初のプロジェクトで分析要求の後に表示される追加のパラメーターが、2 番目のプロジェクトの後に表示されないことです。そして、これらの追加パラメータは「#{project_id}」によってキー化されたハッシュ内になく、代わりに独自の小さな世界の外側にあります。これにより、次のようなことを行って更新することが非常に困難になります。
params[:projects].keys.each do |project_id|
'update entries based on project_id'
end
この問題について専門家のアドバイスをくれる人はいますか? 私はこれを立ち上げて機能させる必要があるため、IT サービスまたは化学サービスをあなたのアドバイスと交換したいと思います (私は研究室で働いています)。
読んでくれてありがとう、 -Adam tl;dr - フォームは、フォーム内の属性を私が思うように「ハッシュ」していません。
-- 編集 -- 2012 年 11 月 29 日 - パラメーター ハッシュがこのように歪んでいる理由をまだ理解できていませんが、その方法を理解できれば合理的な回避策を思いつきましたこと:formtasticまたは独自の方法で削除オプションを構成します。つまり、プロジェクトの作成フォームを介して、必要な数の分析要求を作成できますが、編集フォームを介してそれらを追加および削除する方法が必要になるだけです。コレクション内のオプションが「削除」に設定されており、データベース ID がコントローラー レベルのメソッドで動作していることがわかります。しかし、もっと差し迫っているのは、Rails 3.2.1 ではまだ実現できていない形式で追加のリクエストを追加できるようにすることです。2.3.5 で動作することはわかっていますが、これまでのところ、私の構成では動作していません。私'
+2 時間 (後で) - フィールドを削除するための Ryan Bates の ep.197 メソッドを実装しました。しかし、:allow_destroy => true を設定したにもかかわらず、formtastic または私のモデルのいずれかが _destroy フィールドをどう処理すればよいかわからないという問題に遭遇しました。おそらくリンクの配置と関係がありますか?これが私の最新のフォームのコードです (js とアプリケーション ヘルパー コードは、ここで確認できるとおりです): http://pastie.org/5454653