设计:将first_name添加到用户

时间:2011-07-17 05:29:14

标签: ruby-on-rails

Rails 3.1.RC4
设计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 %>)

这是我的问题:当我尝试通过我创建的新用户表单注册新用户时,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>

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

提前致谢!

4 个答案:

答案 0 :(得分:9)

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

attr_accessible :first_name, :last_name

它在您的控制台中有效,因为您可能会执行以下操作:

@user = User.first
@user.first_name = "foo"
@user.save

但如果无法访问该属性,则无效:

@user = User.new(:first_name => "foo")
@user.save

您应该会在日志文件中看到警告“无法批量分配受保护的属性”。

要进行验证,请查看Rails docsthis guide。例如,要确保提供全名,请添加

validates_presence_of :first_name, :last_name

到你的模特。

答案 1 :(得分:0)

我想,您忘记为新属性设置attr_accessible

答案 2 :(得分:0)

将以下内容添加到您的应用程序控制器

protected

    def configure_permitted_parameters
        devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:first_name, :last_name, :profile_name, :email, :password, :password_confirmation) }
        devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :profile_name, :email, :password, :password_confirmation) }


    end

答案 3 :(得分:0)

我已经解决了这个问题。它也适用于铁轨4。

第1步:第一

$ rails生成迁移AddFieldToUsers first_name:string last_name:string

$ rake db:migrate

第2步: 在设计视图中添加这些代码

  <div class="field">
    <%= f.label :first_name %><br />
    <%= f.text_field :first_name, autofocus: true %>
  </div>

  <div class="field">
    <%= f.label :last_name %><br />
    <%= f.text_field :last_name, autofocus: true %>
  </div>

第3步:将此添加到您的应用程序控制器

  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name,:last_name,:email, :password) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name,:last_name,:email, :password) }
  end