Rails 4设计名字,姓不到DB

时间:2014-02-15 03:53:11

标签: mysql ruby-on-rails devise ruby-on-rails-4

我在rails 4应用程序上设置了一个设计。我按照本教程https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign-in-using-their-username-or-email-address添加了用户名值。我也想要名字和姓氏,所以我认为它与教程很接近。我遵循了一些部分并跳过了身份验证部分,并更新了视图。它有点工作。当注册字段显示和填写时,它们会通过所有检查但不会输入数据库。它只显示名字和姓氏的NULL,但用户名实际上正在工作。以下是我所做的步骤。

  1. 我遵循了整个教程(除了关于gmail和me.com的最后一部分)。

  2. 我添加了名字和姓氏字段:

  3. 我运行了命令

    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 %>添加到注册新注册和注册编辑视图中。

    提交表单时,字段显示并且没有错误。他们只是不更新​​数据库。我通过PHPMyAdmin在MYSQL数据库中手动添加了名称,然后转到编辑页面并正确地抓取它。如果你能帮忙的话会很棒。谢谢! :)

1 个答案:

答案 0 :(得分:3)

尝试从attr_accessor中删除它,因为attr_accessor的作用类似于实例变量

http://apidock.com/ruby/Module/attr_accessor