1

Railsを使用してフォームを作成しています。モデルの単一のインスタンスを扱っていないので、form_forを使用できないことはわかっています。したがって、私はform_tagを使用しています。各イテレータ内に(check_box_tagを使用して)いくつかのチェックボックスを作成し、送信ボタンで終了します。したがって、私の見解は次のようになります。

<tbody>
<% form_tag ('/placeBids') do # placeBids controller and route setup correctly%>

  <% @auctions.each do |auction| %>
    <tr>
    <td>....
    <td>....
    <td><%= check_box_tag auction.product # sets check box id to product name%></td>
   </tr>
  <% end # end auction.each do%>
  </tbody>
</table>

<div style="float: right;">
    <%= submit_tag 'Submit' %>
</div>

<% end # end form_for %>

これで、自分のページにアクセスして送信ボタンを押すとコントローラーアクションがトリガーされるという点で機能します。しかし、私がこれをカピバラでテストしようとすると:

let(:bid) {"Submit"}
   describe "when bidding on single auction =>"  do
                @auctions = Auction.all
                @auctions.each do |auction|
                    it "should increase the price of a checked auction '#{auction.product}' by $1." do
                        check (auction.product)
                        expect {click_button bid}.to change {auction.price}.by(1)
                    end

エラーが発生します:

Failure/Error: expect {click_button bid}.to change {auction.price}.by(1)
     NoMethodError:
       undefined method `node_name' for nil:NilClass

submit_tagが適切な場所にない場合、このエラーが発生するという話を聞いたことがあります。しかし、私は物事をセットアップしたと確信しています。それで、イテレータ内にFormTagHelpersを作成することさえ可能ですか?もしそうなら、私が間違っていることを推測しますか?

4

1 に答える 1

1

私は問題を見つけました:

テーブル内でフォームの開始を宣言しているため、テーブルを閉じると、フォームが自動的に閉じられます。したがって、submit_tagはフォームの外にあります。form_tagをテーブル宣言の上に移動するとすぐに正常に機能します。

HTMLがこのように機能するとは思っていませんでした=(

于 2012-10-24T19:25:53.487 に答える