Rails helper form_for将nil:NilClass参数传递给块

时间:2014-04-16 12:55:04

标签: ruby-on-rails haml helper

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

这里是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等关键字时,我找不到相关答案。

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

1 个答案:

答案 0 :(得分:2)

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

在您提到的Railscasts剧集中,代码如下所示:

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

与您的代码不相似!

相关问题