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 %>

现在这可行,因为我可以访问我的页面并点击提交按钮触发我的控制器操作。但是,当我尝试使用 Capybara 进行测试时:

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 回答