【发布时间】:2014-12-28 08:33:17
【问题描述】:
我是 Rails 新手。我正在使用 rails 4.2 并且我破坏了我的 user.rb 模型或控制器中的某些内容,因此我无法在控制台或 Web 浏览器中使用保存或更新(对于用户中的某些变量,我可以更改名称、电子邮件和浏览器中的密码)。我发现了一个类似的问题here,但我无法获得工作建议。
这是我的代码 用户数据库表
create_table "users", force: :cascade do |t|
t.string "name"
t.string "email"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "avatar_file_name"
t.string "avatar_content_type"
t.integer "avatar_file_size"
t.datetime "avatar_updated_at"
t.string "password_hash"
t.string "password_salt"
t.boolean "admin", default: false
end
用户.rb
class User < ActiveRecord::Base
has_many :recipes
has_many :comments
#attr_accessible :email, :password, :password_confirmation
attr_accessor :password
before_save :encrypt_password
validates_confirmation_of :password, :on => :create
#validates :name, presence: true, uniqueness: true
#validates :email, presence: true, uniqueness: true
validates :password, presence: true, length: { in: 6..20 }
has_attached_file :avatar, :styles => {
:medium => "300x300>",
:thumb => "100x100>"
},
:default_url => "/images/:style/missing.png",
:bucket =>'davisrecipebook',
:storage => :s3,
:s3_credentials => "#{Rails.root}/config/s3.yml"
#:s3_credentials => Proc.new{|a| a.instance.s3_credentials }
#:storage => :dropbox,
#:dropbox_credentials => Rails.root.join("config/dropbox.yml")
#def s3_credentials
# {:bucket =>'davisrecipebook', :access_key_id => '', :secret_access_key => ''}
#end
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
validates_attachment_size :avatar, :less_than => 10.megabytes
def self.authenticate(email, password)
user = find_by_email(email)
if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
user
else
nil
end
end
def encrypt_password
if password.present?
self.password_salt = BCrypt::Engine.generate_salt
self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
end
end
end
控制台
2.1.5 :073 > User.last
User Load (0.5ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1
=> #<User id: 7, name: "hate", email: "death", created_at: "2014-12-28 07:32:22", updated_at: "2014-12-28 08:24:01", avatar_file_name: nil, avatar_content_type: nil, avatar_file_size: nil, avatar_updated_at: nil, password_hash: "$2a$10$9rEtvSoO0DOzm5u/Vop0O.5matAM8gTI0t6QZ470UyF...", password_salt: "$2a$10$9rEtvSoO0DOzm5u/Vop0O.", admin: false>
2.1.5 :074 > s = _
=> #<User id: 7, name: "hate", email: "death", created_at: "2014-12-28 07:32:22", updated_at: "2014-12-28 08:24:01", avatar_file_name: nil, avatar_content_type: nil, avatar_file_size: nil, avatar_updated_at: nil, password_hash: "$2a$10$9rEtvSoO0DOzm5u/Vop0O.5matAM8gTI0t6QZ470UyF...", password_salt: "$2a$10$9rEtvSoO0DOzm5u/Vop0O.", admin: false>
2.1.5 :075 > s.admin = true
=> true
2.1.5 :076 > s.save
(0.2ms) BEGIN
User Exists (0.6ms) SELECT 1 AS one FROM "users" WHERE ("users"."name" = 'hate' AND "users"."id" != 7) LIMIT 1
User Exists (0.3ms) SELECT 1 AS one FROM "users" WHERE ("users"."email" = 'death' AND "users"."id" != 7) LIMIT 1
(0.2ms) ROLLBACK
=> false
2.1.5 :077 > s.errors
@messages={:password=>["can't be blank", "can't be blank", "is too short (minimum is 6 characters)"]}>
【问题讨论】:
-
我知道我上面的语法并不理想,所以请原谅我。我似乎看不到如何制作大块代码
标签: ruby-on-rails rails-console