浏览优秀Rails tutorial by Michael Hartl (第 8 章),我尝试在我的 (Haml) View 中使用 Rails 提供的 form_tag
帮助器。由 form_tag
传递给 block 的表单具有值 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="✓" /><input name="authenticity_token" type="hidden" value="c72gY3kuFKTFxNerFWT5fH1n63cp9U8Wj0+UBTllqPQ=" /></div>
nil
</form>
相反,form_for
具有预期的行为。
我在互联网上搜索找不到答案:在RailsCast 270 about Authentication中(大约 3:30),视频显示的代码看起来与我的类似。我在 Stackoverflow 和 Google 上使用 form_tag
、NilClass
或 haml
等关键字搜索时没有找到相关答案。
有人知道我做错了什么吗?谢谢!
最佳答案
您可以查看this other SO question了解 form_for
和 form_tag
之间的区别。
在您提到的 Railscasts 剧集中,代码如下所示:
= form_tag(sessions_path) do
= label_tag :email
= text_field_tag :email, params[:email]
这与您的代码不相似!
关于ruby-on-rails - Rails 助手 form_for 传递 nil :NilClass parameter to the block,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23110102/