多くのフォームを生成するブロックがあり、最初のフォームを除いて、すべてのフォームが期待どおりに機能します。 .
コードは次のとおりです。
<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のフォームを使用すると、期待どおりに機能します。
誰かがなぜそれが機能しないのかを見つけるのを手伝ってもらえますか?
前もって感謝します
編集: 正しく機能していないフォームを使用すると、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メソッドを使用しますが、理由はわかりません。