form_tag和iterator一起工作

时间:2012-10-24 03:34:29

标签: ruby-on-rails forms iterator

我正在使用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吗?如果是这样,任何猜测我做错了什么?

1 个答案:

答案 0 :(得分:1)

我发现了问题:

因为我在表格中声明了表格的开头,当我关闭表格时它会自动关闭表格。所以,我的submit_tag不在表单中。只要我将form_tag'移到'表格声明之上,它就可以正常工作。

我没想到HTML会以这种方式工作=(