我正在关注 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/