2014-09-01 37 views
0

为什么我无法在rails中更新db列? 数据库有一列 - 'remember_token',但更新不起作用吗?rails db的列remember_token没有保存,并始终为零?

结果DB迁移

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

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

轨台 - 输出! remember_token是无直接分配

irb(main):063:0* user 
=> #<User id: 1, name: "Test", email: "[email protected]", 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: "[email protected]", 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('[email protected]') 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: "[email protected]", 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 
+0

您的模型看起来如何?你有任何回调? – usha 2014-09-01 23:58:17

+0

您好,是有回调 '类用户 Ady 2014-09-02 00:18:50

回答

-2

你必须在你的用户模型添加:remember_tokenattr_accessible

attr_accessible :remember_token 
+0

谢谢,我有它设置 'class User Ady 2014-09-02 00:11:49

+0

'attr_accessor'!='attr_accessible' !!! – sevenseacat 2014-09-02 02:10:12

+0

也是,海报在他们的代码中使用strong_params - 所以他们不需要'attr_accessible'。 – sevenseacat 2014-09-02 02:10:52

-2

看起来:remember_token属性没有被轨道拾起。尝试重新启动控制台,它可能工作。

+0

试过几次:( – Ady 2014-09-02 02:33:19