1

現在、繭の宝石を使用して、ネストされたフォームをbootstrap/simple_formとともに処理しています。私のモデルは次のようにレイアウトされています。

  • A コンタクトのhas_many目標
  • A 目標has_manyタスク
  • タスクのhas_oneリマインダー (まだ実装されていません。この問題が解決したら、次の予定です)

私のフォームは、目標フィールドが正しく作成された状態でレイアウトされており、問題なく最初の目標にタスクを追加/削除できます。ただし、別の目標を動的に追加すると (新規または編集アクションに関係なく)、それにタスクを追加/削除できません ([タスクを追加] をクリックすると、最初の目標にのみ追加されます)。以下は私のフォームです:

_form.html.erb

<%= simple_form_for(@contact) do |f| %>

  <% if @contact.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@contact.errors.count, "error") %> prohibited this contact from being saved:</h2>
      <ul>
      <% @contact.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <%= f.input :name %>
  <%= f.input :title %>
  <%= f.input :company %>
  <%= f.input :email %>
  <%= f.input :notes %>

  <h3>Goals:</h3>
  <div id="goals">
    <%= f.simple_fields_for(:goals) do |goal| %>
    <%= render 'goal_fields', :f => goal %>
      <div class="links">
        <%= link_to_add_association 'add goal', f, :goals, :render_options => {:wrapper => 'bootstrap' } %>
      </div>
    <% end %>
  </div>

  <%= f.submit :submit %>

<% end %>

_goal_fields.html.erb

<div class="nested-fields">

  <%= f.input :title %>
  <%= f.input :due_date %>
  <%= f.input :notes %>

  <%= link_to_remove_association "remove goal", f %>

    <h4>Tasks:</h4>
    <div id="tasks">

      <%= f.simple_fields_for(:tasks) do |task| %>
      <%= render 'task_fields', :f => task %>
        <div class="links">
          <%= link_to_add_association 'add task', f, :tasks, :render_options => {:wrapper => 'bootstrap' } %>
        </div>
      <% end %>
    </div>
</div>

task_fields.html.erb

<div class="nested-fields">

  <%= f.input :task_type %>
  <%= f.input :date_of_task %>
  <%= f.input :complete, as: :boolean, checked_value: true, unchecked_value: false %>

  <%= link_to_remove_association "remove task", f %>

</div>

コードを調べて、適切な div クラスと ID を使用していることを確認しましたが、フォームのどこかに問題があると確信しています。また、simple_form/bootstrap に必要なラッパー オプションも追加しました。私を助けてくれてありがとう。

4

1 に答える 1

3

これはhtml/javascriptの問題のようです。cocoonの問題に同様の問題が投稿されたばかりなので、繰り返しのクラスの代わりにIDを使用しているように思えます。

それが問題の原因かどうかはわかりませんが、<div id='tasks'>.

その場合に私が期待する動作ですが、フォームでは明らかに機能しますが、最初のフォームでのみ保存されます。正確にはあなたが説明したものではありません。

第二に、各子供に「タスクを追加」または「目標を追加」することは意図的ですか?

これらのループを次のように記述します。

<%= f.simple_fields_for(:tasks) do |task| %>
  <%= render 'task_fields', :f => task %>
<% end %>
<div class="links">
  <%= link_to_add_association 'add task', f, :tasks, :render_options => {:wrapper => 'bootstrap' } %>
<% end %>

[暴言] haml をもう一度宣伝する必要がありますか? erb を使用するときに非常に多くのエラーを犯している人を目にしますが、ごちゃごちゃしています (インデントが非常に混乱しています)。なぜより多くの人が haml や slim を使用するのか正直に理解できないことがあります。私はそれが私の見解をより読みやすくすることに気づきました。 [/暴言]

于 2014-05-21T23:20:46.997 に答える