1

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

在此处输入图像描述

我已经下载了他的源代码,但是当我尝试运行它时,我无法完成注册,除非我在电子邮件字段中输入电子邮件以及在用户名字段中输入电子邮件。因此,我更改了代码以将 af.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 模型的可访问属性中,这是用户表,带有一个用户名字段,所以我不知道为什么我会得到“未定义的方法”用户名字段。该应用程序只允许我输入用户名标签所在的电子邮件地址

 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

你能想出为什么会发生这种情况的原因吗?

4

1 回答 1

8

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

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

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

于 2013-02-13T02:58:28.703 回答