我在Rails 3中创建了一个用户模型。我正在尝试从表单创建一个新模型。
表单有一个:密码字段
<%= f.label(:password) %>
<%= f.password_field(:password) %>
但模型包含属性:hashed_password。
models / user.rb文件包含在将模型保存到数据库之前采用:password并将其编码为:hashed_password的逻辑。
#models/user.rb
require 'digest/sha1'
class User < ActiveRecord::Base
attr_accessible :password, :email, :first_name, :last_name
attr_accessor :password
before_save :create_hashed_password
#hash_password adds salt to password and encrypts it
def self.hash_password(password="")
salted_pw = password + PW_SALT
hashed_pw = Digest::SHA1.hexdigest(salted_pw)
end
private
def create_hashed_password
unless password.blank?
self.hashed_password = User.hash_password(password)
end
end
end
我认为应该能够分配:password属性,因为我在用户模型文件中使用了attr_accessor:password。
有趣的是,我可以在控制器中使用质量赋值为:password分配一个值:
#from controllers/users_controller.rb
def create
@user = User.new(params[:user])
...
end
但我无法从rails控制台明确指定myUser.password。
>> myUser = User.new
=> #<User id: nil, first_name: nil, last_name: nil, hashed_password: nil, cell_phone_number: nil, email: "", created_at: nil, updated_at: nil, salt: nil, is_admin: false>
>> myUser.password = "mypw"
NoMethodError: undefined method `password=' for #<User:0x10232cd70>
from /Library/Ruby/Gems/1.8/gems/activemodel-3.2.8/lib/active_model/attribute_methods.rb:407:in `method_missing'
from /Library/Ruby/Gems/1.8/gems/activerecord-3.2.8/lib/active_record/attribute_methods.rb:149:in `method_missing'
from (irb):74
from :0
有谁知道为什么会这样?
提前致谢!