在我的邀请模型中,我有:
attr_accessor :user_token
def create_user(user)
create_user_digest
...
end
private
def create_user_digest
self.user_token = User.new_token
self.user_digest = User.digest(user_token)
end
它生成错误:
undefined method `user_digest=' for #<Invitation:0x000000044c3318>
我已经从 User
模型中调整了设置,其中我有一个类似的有效注册身份验证设置。 user_digest
是Invitation
表中的一列。 .new_token
和 .digest
是 User
模型中的方法(见下文)。什么可能导致错误?
def User.digest(string)
cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
BCrypt::Engine.cost
BCrypt::Password.create(string, cost: cost)
end
def User.new_token
SecureRandom.urlsafe_base64
end
最佳答案
这是因为您在 Invitation 模型的 user_digest 属性上没有任何 setter,所以您应该添加
attr_accessor :user_digest
这样,它的工作方式与 :user_token 的工作方式相同(Ruby 将为您创建一个 getter 和一个 setter)。
希望对你有帮助
关于ruby-on-rails - 从另一个模型文件调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31875441/