设计:将first_name添加到用户

imj*_*mjp 3 ruby-on-rails

Rails 3.1.RC4
Devise 1.4.2

我已经将first_name和last_name列添加到设计用户表中.然后我习惯了控制台为我的第一个用户添加first_name和last_name.

现在,application.html.erb在我确定用户登录后,由于以下代码,我显示了我的名字和姓氏:

<%= current_user.first_name %> <%= current_user.last_name %>(<%= current_user.email %>)
Run Code Online (Sandbox Code Playgroud)

这是我的问题:当我尝试通过我创建的新用户表单注册一个新用户时,first_name和last_name没有存储在数据库中或者其他东西......因为当我使用新用户登录时我拥有的代码在我的application.html.erb不显示名字和姓氏.

这是以下名称中的名字和姓氏的文本字段new.html.erb:

<p><%= f.label :first_name %><br />
   <%= f.text_field :first_name %></p>

<p><%= f.label :last_name %><br />
   <%= f.text_field :last_name %></p>

<p><%= f.label :email %><br />
   <%= f.email_field :email %></p>
Run Code Online (Sandbox Code Playgroud)

我还想知道如何为我创建的这些新列添加验证(first_name和last_name).

提前致谢!

Thi*_*ilo 9

默认情况下,设计会使所有属性受到保护.对于您希望能够批量分配的任何属性(例如,通过表单),您需要在模型中明确允许它:

attr_accessible :first_name, :last_name
Run Code Online (Sandbox Code Playgroud)

它在您的控制台中工作,因为您可能做了类似这样的事情:

@user = User.first
@user.first_name = "foo"
@user.save
Run Code Online (Sandbox Code Playgroud)

但是如果属性不可访问,这将不起作用:

@user = User.new(:first_name => "foo")
@user.save
Run Code Online (Sandbox Code Playgroud)

您将在日志文件中看到警告"无法批量分配受保护的属性".

有关验证,请查看Rails文档本指南.例如,要确保提供全名,请添加

validates_presence_of :first_name, :last_name
Run Code Online (Sandbox Code Playgroud)

到你的模型.