0

私は5つのモデルを持っています、

  1. person_car
  2. 車(タイヤが多い)
  3. person_car_tire
  4. タイヤ(車のもの)

だから私はこのビュー _form.html.erb を持っています

<%= form_for(@person) do |f| %>
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div>

  <% Car.all.each do |c|%>
  <div class="field">
    <%= f.fields_for(:person_cars) do |ff|%>
      Car Name:   <%= ff.check_box :car_id %>|<%= c.car_name%>
      <% c.tires.each do |b|%>
      <div class="field">
        <%= ff.fields_for(:person_car_tires) do |fff|%>
          Tire: <%#= fff.check_box :tire_id%>|<%= b.tire_name%>
        <%end%>
      </div>
      <%end%>
    <%end%>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

そして、保存すると完全に機能しますが、このフォームを使用して編集したいときに問題が発生します。これは、ビューで各車のデータが 4 回複製されるためです。私は探していて、追加のオプションを許可するフィールドを探していたので、次のように作成しました。

<%= form_for(@person) do |f| %>

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div>

  <% @person.cars.each do |c|%>
  <div class="field">
    <%= f.fields_for(:person_cars, c) do |ff|%>
      Actividad:   <%= ff.check_box :car_id %> | <%= c.car.name%>
      <% c.person_car_tires.each do |t|%>
      <div class="field">
        <%= ff.fields_for(:person_car_tires, t) do |fff|%>
          Tarea: <%#= fff.check_box :tire_id%>|<%#= t.tire.name%>
        <%end%>
      </div>
      <%end%>
    <%end%>
  </div>
  <%end%>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

動作するようになりましたが、新しいアクションで選択した車とタイヤのみが表示されます。私が望んでいたわけではありません(最初のフォームを使用すると、ビューのチェックボックスが複製されるため)。

両方のアクションに同じフォームを使用するにはどうすればよいですか?

誰かが私を助けてくれることを願っています。

4

1 に答える 1

0

new と edit の両方に同じ _form パーシャルを使用できます。異なる値に設定されたローカル変数をこのフォームに渡すだけです。基本的に、違いは何であれ、この関数のようなパーシャルへのパラメーター (ローカル変数) として抽象化します。

于 2012-05-28T05:54:56.663 に答える