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