我在rails 4应用程序上设置了一个设备。我遵循了本教程https://github.com/plataformatec/devise/wiki/How-To:-允许用户使用用户名或电子邮件地址登录并添加用户名值。我还想要"名字"one_answers"姓氏",所以我认为这与教程很接近。我遵循了其中的一些部分,跳过了身份验证部分,并更新了视图。它在某种程度上起作用。当注册时,字段会显示出来,当您填写时,它们通过了所有检查,但不会输入到数据库中。它只显示名字和姓氏为NULL,但username实际上是有效的。以下是我所做的步骤。
-
我遵循了整个教程(除了关于gmail和me.com的最后一部分)
-
我添加了名字和姓氏字段:
我运行命令
rails generate migration add_firstname_to_users first_name:string:uniq
rails generate migration add_lastname_to_users last_name:string:uniq
然后是rake db:migrate
。然后,我将字段添加到应用程序控制器中以允许这些字段。这是我的完整application_controller.rb
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
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, :username, :email, :password, :password_confirmation, :remember_me) }
devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) }
devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :last_name, :username, :email, :password, :password_confirmation, :current_password) }
end
end
然后我将名字和姓氏添加到attr_accessor
中。这是我的完整user.rb
模型。
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
attr_accessor :login, :first_name, :last_name
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :authentication_keys => [:login]
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first
else
where(conditions).first
end
end
end
然后我更新了我的视图,并将<%= f.text_field :first_name %>
和<%= f.text_field :last_name %>
添加到registrations new和registrations edit视图中。
这些字段在提交表单时显示出来,没有任何错误。它们只是不更新数据库。我通过PHPMyAdmin在MYSQL数据库中手动添加了这个名称,然后转到编辑页面,它正确地获取了它。如果你能帮忙就太好了。谢谢!:)
尝试将其从attr_accessor中删除,因为attr_accessor的工作方式类似于实例变量
http://apidock.com/ruby/Module/attr_accessor