我正在使用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吗?如果是这样,任何猜测我做错了什么?
答案 0 :(得分:1)
我发现了问题:
因为我在表格中声明了表格的开头,当我关闭表格时它会自动关闭表格。所以,我的submit_tag不在表单中。只要我将form_tag'移到'表格声明之上,它就可以正常工作。
我没想到HTML会以这种方式工作=(