0

多くのフォームを生成するブロックがあり、最初のフォームを除いて、すべてのフォームが期待どおりに機能します。 .

コードは次のとおりです。

<div class="well span4"><h4>Billetes</h4>
<% @paper_bills.each do |pb| %>
    <li class="well well-small">
        <div><%= pb.name %>

        <!-- We show the quantity of paper_bills -->
            <% if @corte.paper_bills != nil %>
                <% @corte.corte_paper_bills.each do |cp| %>
                    <% if cp.paper_bill_id == pb.id %>
                        <p>ID: <%= cp.id %></p>
                        <h6>Cantidad: <%= cp.quantity %></h6>
                        <h5>Suma: <%= cp.suma %></h5>
                        <!-- Modal -->
                        <div id=<%= "modal_#{pb.id}" %> class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
                          <div class="modal-header">
                            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                            <h3 id="myModalLabel">Billetes de <%= pb.name %></h3>
                          </div>
                          <div class="modal-body">
                            <p>
                                <%= simple_form_for(@corte_paper_bill, url: corte_paper_bill_path) do |ff| %>
                                    <%= ff.error_notification %>
                                    <%= ff.input :cp_id, 
                                                    input_html: {value: cp.id}, 
                                                    as: :hidden %>
                                    <%= ff.association :corte, 
                                                    input_html: {value: @corte.id},
                                                    as: :hidden %>
                                    <%= ff.association :paper_bill, 
                                                    input_html: {value: pb.id},
                                                    as: :hidden %>
                                    <%= ff.input :quantity %>
                            </p>
                          </div>
                          <div class="modal-footer">
                            <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
                                    <%= ff.button :submit %>
                            <% end %>
                          </div>
                        </div>

                        <!-- Button to trigger modal -->
                        <div style="float: right; margin-top: -80px;">
                            <a href=<%= "#modal_#{pb.id}" %> role="button" class="btn btn-warning" data-toggle="modal">Actualizar</a>
                        </div>

                    <% end %>
                <% end %>
            <% end %>
        </div>



        <br />


    </li>
<% end %>

フォームで動作するアクションは次のとおりです。

def corte_paper_bill
  @corte_paper_bill = CortePaperBill.find(params[:corte_paper_bill][:cp_id])
  attr = params[:corte_paper_bill].except(:cp_id)
  @corte_paper_bill.update_attributes(attr)
  value = @corte_paper_bill.paper_bill.value
  @corte_paper_bill.suma = @corte_paper_bill.quantity * value
  @corte_paper_bill.save

  respond_to do |format|
    format.html { redirect_to edit_corte_path(@corte_paper_bill.corte_id) }
    format.json { head :no_content }
  end
end

ブロックが生成する 2 つの div を次に示します。

ブロックが生成する div

オレンジ色のボタンをクリックすると、次のフォームが表示されます。

ここに画像の説明を入力

最初の div が生成するフォームを使用すると、それが機能せず、アクションがリダイレクトするページではなく、別のページにリダイレクトされます。

ブロックが生成した他のdivのフォームを使用すると、期待どおりに機能します。

誰かがなぜそれが機能しないのかを見つけるのを手伝ってもらえますか?

前もって感謝します

編集: 正しく機能していないフォームを使用すると、Rails サーバー ターミナルに次のように表示されることがわかりました。

    Started PUT "/cortes/8" for 127.0.0.1 at 2013-05-04 10:40:46 -0500
Processing by CortesController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"e2k7tN+L0tzQPUyOXJTmTjEnx+2jXzisR/KCa0VSd7A=", "corte_paper_bill"=>{"cp_id"=>"30", "corte_id"=>"8", "paper_bill_id"=>"1", "quantity"=>"10"}, "commit"=>"Create Corte paper bill", "id"=>"8"}
  Corte Load (0.4ms)  SELECT "cortes".* FROM "cortes" WHERE "cortes"."id" = $1 LIMIT 1  [["id", "8"]]
   (0.1ms)  BEGIN
   (0.1ms)  COMMIT
Redirected to http://localhost:5555/cortes/8
Completed 302 Found in 4ms (ActiveRecord: 0.7ms)

そして、他のフォームを使用すると、次のように表示されます。

Started POST "/corte_paper_bill" for 127.0.0.1 at 2013-05-04 10:49:52 -0500
Processing by CortesController#corte_paper_bill as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"e2k7tN+L0tzQPUyOXJTmTjEnx+2jXzisR/KCa0VSd7A=", "corte_paper_bill"=>{"cp_id"=>"31", "corte_id"=>"8", "paper_bill_id"=>"2", "quantity"=>"10"}, "commit"=>"Create Corte paper bill"}
  CortePaperBill Load (0.7ms)  SELECT "corte_paper_bills".* FROM "corte_paper_bills" WHERE "corte_paper_bills"."id" = $1 LIMIT 1  [["id", "31"]]
   (0.1ms)  BEGIN
   (0.3ms)  UPDATE "corte_paper_bills" SET "quantity" = 10, "updated_at" = '2013-05-04 15:49:52.663944' WHERE "corte_paper_bills"."id" = 31
   (16.7ms)  COMMIT
  PaperBill Load (0.3ms)  SELECT "paper_bills".* FROM "paper_bills" WHERE "paper_bills"."id" = 2 LIMIT 1
   (0.1ms)  BEGIN
   (0.2ms)  UPDATE "corte_paper_bills" SET "suma" = 5000.0, "updated_at" = '2013-05-04 15:49:52.692300' WHERE "corte_paper_bills"."id" = 31
   (9.6ms)  COMMIT
Redirected to http://localhost:5555/cortes/8/edit
Completed 302 Found in 44ms (ActiveRecord: 27.9ms)

「コミット」は異なります。1つはPUTメソッドを使用し、もう1つはPOSTメソッドを使用しますが、理由はわかりません。

4

2 に答える 2

0

コードが長すぎるため、詳細を読んでいません。

eachしかし、問題はあなたの方法とsimple_form_forタグだと思います:

 <% @corte.corte_paper_bills.each do |cp| %>

<%= simple_form_for(@corte_paper_bill, url: corte_paper_bill_path) do |ff| %> 

フォーム コードは特定の idでフォームを生成するため、これらのコードを一緒に使用すると問題が発生します。そのため、機能するフォームは 1 つだけです。

解決策は、単純なフォームタグに別の ID を割り当てることです

 <%= simple_form_for(@corte_paper_bill, url: corte_paper_bill_path, 
   html: {id: "a_custom_id_change_in_each") do |ff| %> 
于 2013-05-03T19:38:49.210 に答える