Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在ruby模型中设置默认属性_Ruby On Rails_Ruby_Rails Models - Fatal编程技术网

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的数据库中填充用户。。。当我试图给函数赋值时,这个解决方案会出现问题吗?