【问题标题】:rails db column remember_token is not saved and always nil? [duplicate]rails db column remember_token 未保存且始终为零? [复制]
【发布时间】:2014-10-26 03:47:52
【问题描述】:

为什么我无法更新 rails 中的 db 列? 数据库有一列 - 'remember_token' 但更新不起作用?

数据库迁移结果

    ....
    ....
    ....

== 20140830041234 AddRememberTokenToUsers: migrating ==========================
-- add_column(:users, :remember_token, :string)
   -> 0.0010s
-- add_index(:users, :remember_token)
   -> 0.0000s
== 20140830041234 AddRememberTokenToUsers: migrated (0.0030s) =================

rails 控制台 - 输出! remember_token 在直接分配后为零

irb(main):063:0* user
=> #<User id: 1, name: "Test", email: "hb@c.co", created_at: "2014-09-01 22:52:02", updated_at: "2014-09-01 22:52:02", p
assword_digest: "$2a$10$/66wO2dBte/xCXqxk.UAo.v.7.XZjsBFA3AerAWkHp16...", remember_token: nil>
irb(main):064:0> User.digest('asdasd')
=> "85136c79cbf9fe36bb9d05d0639c70c265c18d37"
irb(main):065:0> user.remember_token = User.digest('asdasd')
=> "85136c79cbf9fe36bb9d05d0639c70c265c18d37"
irb(main):066:0>
irb(main):067:0* user
=> #<User id: 1, name: "Test", email: "hb@c.co", created_at: "2014-09-01 22:52:02", updated_at: "2014-09-01 22:52:02", p
assword_digest: "$2a$10$/66wO2dBte/xCXqxk.UAo.v.7.XZjsBFA3AerAWkHp16...", remember_token: nil>
irb(main):068:0>

remember_token 在 update_attributes 后为零

irb(main):071:0> user.update_attributes(name: "Yahoo", remember_token: "will this get saved")
  ←[1m←[36m (0.0ms)←[0m  ←[1mbegin transaction←[0m
  ←[1m←[35mUser Exists (1.0ms)←[0m  SELECT 1 AS one FROM "users" WHERE (LOWER("users"."email") = LOWER('hb@c.co') AND "u
sers"."id" != 1) LIMIT 1
  ←[1m←[36mSQL (7.0ms)←[0m  ←[1mUPDATE "users" SET "name" = ?, "updated_at" = ? WHERE "users"."id" = 1←[0m  [["name", "Y
ahoo"], ["updated_at", Mon, 01 Sep 2014 23:12:59 UTC +00:00]]
  ←[1m←[35m (8.0ms)←[0m  commit transaction
=> true
irb(main):072:0>
irb(main):073:0* user
=> #<User id: 1, name: "Yahoo", email: "hb@c.co", created_at: "2014-09-01 22:52:02", updated_at: "2014-09-01 23:12:59",
password_digest: "$2a$10$/66wO2dBte/xCXqxk.UAo.v.7.XZjsBFA3AerAWkHp16...", remember_token: nil>


下面是模型

class User < ActiveRecord::Base
    attr_accessor :remember_token
    before_save { self.email = email.downcase }
    before_create :create_remember_token

    def User.new_remember_token
        SecureRandom.urlsafe_base64
    end

    def User.digest(token)
        Digest::SHA1.hexdigest(token.to_s)
    end


private
    def create_remember_token
        self.remember_token = User.digest(User.new_remember_token)
    end

end


以防万一——这里是控制器

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def show
    @user = User.find(params[:id])
  end

  def create
    #@user = User.new(params.require(:user).permit(:name, :email, :password, :password_confirmation)
    @user = User.new(user_params)
    if @user.save
        # Handle a successful save.
            flash[:success] = "Welcome #{@user.name} to the Sample App!"
            redirect_to @user
        else
        render 'new'
        end
    end

    private
    def user_params
        params.require(:user).permit(:name, :email, :password,:password_confirmation, :remember_token)
    end
end

【问题讨论】:

  • 你的模型看起来怎么样?你有任何回调吗?
  • 嗨,有一个回调class User &lt; ActiveRecord::Base attr_accessor :remember_token before_save { self.email = email.downcase } before_create :create_remember_token

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


【解决方案1】:

您必须在您的用户模型中将:remember_token 添加到attr_accessible

attr_accessible :remember_token

【讨论】:

  • 谢谢,我已经设置好了class User &lt; ActiveRecord::Base attr_accessor :remember_token
  • attr_accessor != attr_accessible!!!
  • 另外,发帖人在他们的代码中使用了 strong_params - 所以他们不需要attr_accessible
【解决方案2】:

似乎:remember_token 属性没有被rails 拾取。尝试重新启动控制台,它可能会工作。

【讨论】:

  • 试了几次:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 2020-07-25
  • 2016-05-02
  • 2012-01-16
  • 2020-01-07
相关资源
最近更新 更多