ruby-on-rails - 即使表中有用户名,也没有用户名字段

我正在关注 Railscast 第 235 集,其中 Ryan Bates 将 omniauth 与 Devise 集成在一起。单击“使用 Twitter 登录”后,他的应用程序会将他带回应用程序中的一个表单,他必须在其中的电子邮件字段中输入电子邮件地址才能完成注册。 (由于他编写 session 代码的方式,他的用户名已经填写在表格中)。表格如下图所示。注意他如何在输入用户名的地方使用 f.email_field,即使他在表中有一个用户名字段。他的应用在视频中成功运行。

我已经下载了他的源代码,但是当我尝试运行它时,我无法完成注册,除非我在电子邮件字段中输入电子邮件以及在用户名字段中输入电子邮件。因此,我更改了代码,将 f.username_field 放在注册表单中

<div class="field"><%= f.label :username %><br />
  <%= f.username_field :username %></div>

但是我得到了这个错误

undefined method `username_field' for #<ActionView::Helpers::FormBuilder:0x007fc058a242c8>

:username 列在 User.rb 模型的可访问属性中,这是 users 表,有一个 username 字段,所以我不知道为什么我会得到 'undefined method' username_field。该应用程序只允许我输入用户名标签所在的电子邮件地址

 create_table "users", :force => true do |t|
    t.string   "email",                  :default => "", :null => false
    t.string   "encrypted_password",     :default => "", :null => false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          :default => 0
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.datetime "created_at",                             :null => false
    t.datetime "updated_at",                             :null => false
    t.string   "username"
    t.string   "provider"
    t.string   "uid"
  end

您能想出发生这种情况的原因吗?

最佳答案

email_field 可能正在使用定义格式的助手。
将“email_field”视为 text_field 或 date_field,除了 email_field 表示具有用于电子邮件地址的格式规则的字段。

因此,除非您定义自己的助手,否则您不能以相同的方式选择模型属性之一加上“_field”。

因此,不要将 email_field 更改为 username_field,而是将其更改为 text_field

https://stackoverflow.com/questions/14845688/

相关文章:

google-apps-script - 在电子表格的 App 脚本中选择连续范围

php - 通知 : unserialize() for symfony2 ( connection

svg - 如何在 HTML 中呈现不同大小的 SVG?

sql - 如何将日期时间字段添加到 + 1 天

jquery - 谷歌地图,基于 Zoom 的比例圆

regex - 如何在 Perl 中的正则表达式匹配后打印行?

bash - 如何从 Bash 中的域获取主 MX IP

CSS - 向内联文本的第二行添加填充

sql - Oracle 在 DBA_ROLES 上的选择权限

memory - 了解mmap