即使表中的用户名也没有用户名字段

时间:2013-02-13 02:55:58

标签: ruby-on-rails validation email username email-validation

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

enter image description here

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

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

但是我收到了这个错误

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

:用户名列在User.rb模型的可访问属性中,这是用户表,带有用户名字段,所以我不知道为什么我会得到'未定义的方法'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

你能想到这可能发生的原因吗?

1 个答案:

答案 0 :(得分:7)

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

除非你定义自己的助手,否则你不能以同样的方式挑选你的模特属性和'_field'。

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