0

これは私が望むように機能していません。

いくつかのステップで構成される新しい仕事のエントリーフォームがあります。デフォルトでは、ジョブごとに4つの新しい未保存のステップが入力されます。

以下のビューのコードを使用して、jQuery UI datepickerコントロールをテキストフィールドにアタッチすることができ、クリックすると正しい入力フィールドに対して表示されます。

ただし、ピッカーから日付を選択すると、最初のステップの開始日を表すフィールドにのみ入力されます。

<%= form_for @job, :url => jobs_path do |f| %>
    <%= f.label :name %>
    <%= f.text_field :name %>

    <% @job.steps.each do |step| %>
        <%= fields_for "job[step_attributes][]", step do |s| %>
            <%= s.label :name %>
            <%= s.text_field :name %>

            <%= s.label :start_date %>
            <%= s.text_field :start_date, :class => :datepicker %>
        <%= end %>
<% end %>

<script type="text/javascript">
    $(function() {
        $('.datepicker').datepicker({ dateFormat: "dd/mm/yy"});
    });
</script>

最終的に、これはid入力要素に対して生成された属性が同じであることに関係していることを私は知っています、疑問に思っていました、誰かがこの問題をうまく克服しましたか?

このフィドル: http: //jsfiddle.net/twilson/u9m9L/は私の問題を示しています。

4

1 に答える 1

1

まず、代わりにフォームビルダーを呼び出しfields_forます。

<%= f.fields_for :steps do |s| %>

@job.steps次に、に関連付け名を指定した場合は、繰り返す必要はありませんfields_forここに、1対多の関連付けでそれを使用する方法の例があります。

それでもこの問題が発生する場合は、生成されたHTMLを貼り付けてください。原因を特定するのが簡単になります。

編集

問題は、Railsフォームビルダーがネストされたフィールドセットに一意のIDを与えるための子インデックスを生成しないためです。これは、関連付けが構築されているが、まだDBに保存されていないために発生した可能性があります。私が見る1つの方法は、次のように子インデックスを手動で割り当てることです。

<% @job.steps.each_with_index do |step,i| %>
  <%= f.fields_for :steps, step, :child_index => i do |s| %>

それが役立つかどうかを確認してください。

新しいオブジェクトしかないことを考えると、これはやや不自然なシナリオです。ネストされたアイテムを動的に追加/削除できるようにするには、これは少し注意が必要です。ネストされたモデルRailscastsでこれをどのように処理できるかを確認できます。

于 2012-07-13T10:37:04.580 に答える