Ruby on rails 如何在ruby模型中设置默认属性
我有一个模型Ruby on rails 如何在ruby模型中设置默认属性,ruby-on-rails,ruby,rails-models,Ruby On Rails,Ruby,Rails Models,我有一个模型用户,当我创建一个模型时,我想实际地设置一些API键,特别是: @user.apikey=Digest::MD5.hexdigest(BCrypt::Password.create(“jibberish”).tos) 我希望能够运行User.create!(:email=>)something@test.com”,并让它使用随机生成的API密钥和密码创建用户 我目前正在控制器中执行此操作,但当我尝试将默认用户添加到seeds.rb文件时,我收到一个SQL错误(说我的apikey为nu
用户
,当我创建一个模型时,我想实际地设置一些API键,特别是:@user.apikey=Digest::MD5.hexdigest(BCrypt::Password.create(“jibberish”).tos)
我希望能够运行User.create!(:email=>)something@test.com”
,并让它使用随机生成的API密钥和密码创建用户
我目前正在控制器中执行此操作,但当我尝试将默认用户添加到seeds.rb
文件时,我收到一个SQL错误(说我的apikey为null)
我尝试覆盖save
定义,但在更新模型时,这似乎会导致问题,因为它会覆盖值。我试图重写初始化
定义,但这返回了一个nil:NilClass
并破坏了它
有更好的方法吗?如果在
保存
定义中,您检查apikey
是否为nil
,如果是,您会设置它吗 如果在保存
定义中检查apikey
是否为nil
,如果是,则进行设置,该怎么办
class User
def self.create_user_with_digest(:options = { })
self.create(:options)
self.apikey = Digest::MD5.hexdigest(BCrypt::Password.create("jibberish").to_s)
self.save
return self
end
end
然后您可以调用User。使用摘要(:name=>“bob”)创建\u User\u,您将获得一个自动创建并分配给用户的摘要,您可能希望使用MD5以外的其他库(如SHA256)生成api密钥。您可能还应该放置一些用户可输入的字段,该字段的数量不断增加(例如当前日期和时间)以及盐
希望这有帮助
然后您可以调用User。使用摘要(:name=>“bob”)创建\u User\u,您将获得一个自动创建并分配给用户的摘要,您可能希望使用MD5以外的其他库(如SHA256)生成api密钥。您可能还应该放置一些用户可输入的字段,该字段的数量不断增加(例如当前日期和时间)以及盐
希望这有助于在验证前查看&尤其是在验证前查看&尤其是使用回调和| |=(=除非对象不是零):)
class用户
但您肯定应该看看,或者gems使用回调和| |=(=除非object不是nil):)
class用户
但是你一定要看一看,或者宝石,我相信这很管用。。。只需将该方法放入您的模型中
def apikey=(value)
self[:apikey] = Digest::MD5.hexdigest(BCrypt::Password.create("jibberish").to_s)
end
我相信这是有效的。。。只需将该方法放入您的模型中
def apikey=(value)
self[:apikey] = Digest::MD5.hexdigest(BCrypt::Password.create("jibberish").to_s)
end
create时是否调用save
def代码>是否正在运行?(对不起,ruby noob)是在create时调用的save
def代码>是否正在运行?(对不起,ruby noob)我正在尝试的是能够将电子邮件传递给一个新的用户对象,然后创建它。我希望模型本身生成一个APIkey和一个Secret,这样无论何时我创建一个用户,我都知道API密钥将在那里。我理解这一点。我在对Tadas回复的评论中的观点是,如果你不接受没有apikey的用户,你需要在\u验证之前进行,而不是在\u创建之前,因为在\u创建之前发生在验证之后。我试图做的是能够将电子邮件传递给新的用户对象,然后创建它。我希望模型本身生成一个APIkey和一个Secret,这样无论何时我创建一个用户,我都知道API密钥将在那里。我理解这一点。我在对Tadas回复的评论中的观点是,如果你不接受没有apikey的用户,你需要在验证之前进行,而不是在创建之前,因为在创建之前发生在验证之后。我认为在创建之前
可能很好,但如果他在验证apikey的存在,在验证之前,他需要在中执行该操作。如果我执行User.new(params)
,则@User.save
是否在创建之前运行过滤器?是的,因为在这个实例中,save实际上是一个create,因为@User.new\u record?
将返回true。谢谢!我最终选择了这个解决方案,它看起来相当优雅,效果非常好!谢谢@webdestroya:如果两个用户拥有相同的密码怎么办?我认为在创建之前可能很好,但是如果他在验证apikey的存在,他需要在验证之前中执行。如果我执行User.new(params)
则@User.save
是否在创建之前运行过滤器?是的,因为在这个实例中,save实际上是一个create,因为@user。new\u record?
将返回true。谢谢!我最终选择了这个解决方案,它看起来相当优雅,效果非常好!谢谢@webdestroya:如果两个用户拥有相同的密码怎么办?我仍然需要能够从存储APIkey的数据库中填充用户。。。当我试图为函数赋值时,这个解决方案会出现问题吗?我仍然需要能够从存储APIkey的数据库中填充用户。。。当我试图给函数赋值时,这个解决方案会出现问题吗?