【问题标题】:Undefined method 'name' in Devise - adding custom field设计中未定义的方法“名称” - 添加自定义字段
【发布时间】:2012-06-23 06:38:53
【问题描述】:

我正在尝试将字段 "name" 添加到 Devise,但是当我注册一个新用户时,它会在我推送提交时中断。

我已确保运行 rake db:migrate 并重新启动服务器,但我收到此错误

ActiveRecord::StatementInvalid in Devise::RegistrationsController#create

NoMethodError:nil 的未定义方法“名称”:NilClass:INSERT INTO “用户”(“created_at”、“current_sign_in_at”、“current_sign_in_ip”、 “电子邮件”、“加密密码”、“last_sign_in_at”、“last_sign_in_ip”、 “名称”、“pic_file_name”、“remember_created_at”、 “reset_password_sent_at”、“reset_password_token”、“sign_in_count”、 "title", "updated_at") 值 ($1, $2, $3, $4, $5, $6, $7, $8, $9, 10 美元、11 美元、12 美元、13 美元、14 美元、15 美元)返回“id”

用户类

  class User < ActiveRecord::Base
  has_and_belongs_to_many :roles

    devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

    attr_accessible :email, :password, :password_confirmation, :remember_me, :role_ids, :name, :title, :pic_file_name
    has_one :picture, :dependent => :destroy
    accepts_nested_attributes_for :picture, :allow_destroy => true
    has_many :comments, :dependent => :destroy
    has_many :discussions, :dependent => :destroy



    def role?(role)
      roles.map(&:name).include? role.to_s
    end

  end

架构

  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   "name"
t.string   "title"
t.string   "pic_file_name"
  end

新注册视图

<%= simple_form_for(resource, :as => resource_name, :html => { :multipart => true }, :html => { :class => 'form-horizontal' }, :url => registration_path(resource_name)) do |f| %>
  <%= f.error_notification %>
  <div class="row">
    <div class="span12 rounded-corners shadow inputs registration">
      <div class="row">
        <div class="span6">
          <h1>Join the Club</h1>
            <%= f.input :email, :required => true, :autofocus => true, :input_html => { :class => "span4" } %>
            <%= f.input :password, :required => true, :input_html => { :class => "span4" } %>
            <%= f.input :password_confirmation, :required => true, :input_html => { :class => "span4" } %>
            <%= f.input :name, :required => true, :input_html => { :class => "span4" } %>

            <%= f.input :title, :required => true, :input_html => { :class => "span4" } %>
            <%= f.input :pic_file_name, :as => :file, :label => "Upload Profile Picture", :required => true %>
        </div>
        <div class="span6 .hidden-phone ">
          <%= image_tag "signup.png", :class => "rounded-corners shadow signup_pic" %>
        </div>
      </div>




      <div class="row">
        <div class="signup_actions span3">
          <%= f.button :submit, "Sign up", :class => 'btn-warning btn-large' %></br >
          <%= render "links" %>
        </div>
      </div>

    <% end %>

  </div>

【问题讨论】:

  • name 不是一个好的字段名称。你把那个字段改成username容易吗?
  • VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15) 看起来很奇怪。您的控制器似乎没有正确地将参数转换为值。
  • 我可以轻松更改字段的名称,我可以看到这是一个有价值的更改;但是,我认为这样做不会解决问题。如果我在这里错了,请告诉我。

标签: ruby-on-rails ruby ruby-on-rails-3 devise


【解决方案1】:

在用户类中将名称放在attr_accessible: 之后。

【讨论】:

    猜你喜欢
    • 2016-01-31
    • 1970-01-01
    • 2019-06-01
    • 2017-03-15
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多