2013-02-13 90 views
0

我跟随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 

你能想到的一个原因,这可能发生我输入电子邮件地址?

回答

7

email_field可能使用了定义格式的帮助程序。
想像text_field或date_field中的'email_field',但email_field表示具有用于电子邮件地址的格式规则的字段。

所以你不能选择你的模型属性加'_field',除非你定义了你自己的助手。

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

+0

他补充说,用户名,以表他创造了色器件的用户之后。也许设计人员为email_field创建了帮手,但由于当时用户名并不存在,所以没有提供。 – Leahcim 2013-02-13 03:01:26

+0

解决了这个问题。谢谢,我会为你投票给你 – Leahcim 2013-02-13 03:03:42

相关问题