2014-04-16 55 views
1

浏览优秀的Rails tutorial by Michael Hartl(第8章),我试图在我的(Haml)视图中使用由Rails提供的form_tag帮助器。通过form_tag传递给该块的表单的值为nil,我猜这不是预期的用途,因为它阻止在表单中生成字段。我不明白我做错了什么。Rails帮助器form_for将nil:NilClass参数传递给块

这里HAML代码:

= form_tag(sessions_path) do |f| 
    = # f.label :email # undefined method `label' for nil:NilClass 
    = f.class.name  # NilClass 
= form_for(:session, url: sessions_path) do |f| 
    = f.label :email # Email 
    = f.class.name  # ActionView::Helpers::FormBuilder 

这里说的它(form_tag)第一部分生成HTML:

<form accept-charset="UTF-8" action="/sessions" method="post"><div style="display:none"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="c72gY3kuFKTFxNerFWT5fH1n63cp9U8Wj0+UBTllqPQ=" /></div> 

nil 
</form> 

相反的form_for有预期的行为。

我找不到在互联网上搜索的答案:在RailsCast 270 about Authentication(约3:30),视频显示的代码与我的相似。在Stackoverflow和Google上使用form_tagNilClasshaml等关键字进行搜索时,我找不到相关答案。

有人会对我做错了什么有线索吗?谢谢!

回答

2

你可以看看this other SO question了解form_forform_tag之间的区别。

在你提到的Railscasts情节,代码如下:

= form_tag(sessions_path) do 
    = label_tag :email 
    = text_field_tag :email, params[:email] 

这是不是类似于你的代码!

+0

谢谢,我不知道我是怎么错过的! – wacha