ruby-on-rails - Rails 助手 form_for 传递 nil :NilClass parameter to the block

标签 ruby-on-rails haml helper

浏览优秀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="&#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 等关键字搜索时没有找到相关答案。

有人知道我做错了什么吗?谢谢!

最佳答案

您可以查看this other SO question了解 form_forform_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/

相关文章:

ruby-on-rails - Ruby on Rails 和 haml 语法错误与文本配合

ruby-on-rails - 在 sidekiq 上配置 redis 身份验证

ruby-on-rails - 你怎么写tr :nth-child(odd) in Sass?

ruby-on-rails - Rails View 在 ruby​​ 1.9 中自发燃烧的ivars

python - Pyramid/Pylons Framework - 关于我如何使用 'helpers' 完成某些任务的意见

java - 如何在 Apache POI 中重用字体?

ruby-on-rails - 使用 Active Record Reputation System gem,当我按投票排序时不会发生排序

ruby-on-rails - 需要 LRU 缓存时,Memcached 与 Redis 作为 Rails.cache

ruby - 你能在渲染过程中将 ruby​​ 对象传递给 haml 吗?

if-statement - Handlebars #if不在#forEach内工作