crest-cassia/oacis — pull request #252 by ymurase (2014-09-02 08:28:09+00:00)
Title: Bugfix host parameter is not correct

fixed #250

#250 の問題に加えてもう１件バグが見つかったので同時に修正
- bug1: ParameterSetの新規作成フォームで、ホストパラメータを更新してもCLIが更新されない。
- bug2: ホストパラメータが正しくセットされずにRunが作られる場合がある

既存の実装では、フォームの中にhost_parameter_fieldのためのフォームがHost数回重複して配置されており、submitted_toが切り替わるたびに表示するフォームを切り替えていた。
しかし、JSを使ってformをシリアライズした内容をpostで送ると、display:noneのフィールドの値も送信される。よってフィールド名が重複している場合、最後のフィールドの値が送信されていた。

この問題を解決するため、ajax処理によってホストのフィールドを取得するように実装。
hosts_controller の _host_parameter_fields アクションにHost_IDを送信すると、ホストパラメータを入力するためのフィールドをレンダリングして返し(runs/_host_parameter_fields.html.haml)、JSで既存のフォームに埋め込むという処理を行う。
RunsControllerではなくHostsControllerにアクションを追加したのは、AJAXリクエストを出す時点でPSが生成されておらずRunを作る事ができないため。

フォームのsubmitted_toでセレクトボタンでデフォルトでnilではなく、何らかのホストが表示されてほしいので、runをbuildするときにsubmitted_toをexecutable_onの最初の値に設定。

以上でbug2は修正された。
さらにbug1を修正するために、 `$('#new_parameter_set').trigger('change');` を追加。
CLIを表示するコールバックとhost_parameter_fieldを埋め込むコールバックがどちらが先に呼ばれるかコントロールできないため、host_parameter_fieldの埋め込み処理の中で明示的にCLIのコールバックを呼ぶようにした。