gpt4 book ai didi

ruby-on-rails - Before_create 不起作用

转载 作者:数据小太阳 更新时间:2023-10-29 08:30:57 24 4
gpt4 key购买 nike

在我的 Article 模型文件中,我有:

before_create   :generate_token
validates :token, presence: true
private
def generate_token
self.token = SecureRandom.urlsafe_base64
end

在我的迁移中:

t.string :token, null: false

但现在创建文章的测试失败,并显示 ActiveRecord::RecordInvalid: Validation failed: Token can't be blank。在这些测试中,我确实没有为 token 赋值。但是,上面的 before_create 方法不应该自动执行此操作吗?它涉及为新作者调用 create 方法的测试,其中 Controller 方法包括 @author.articles.create! 行(因此没有标记值文章)。

附言我将 debugger 放在 generate_token 方法的顶部,并且它从不为任何测试触发。

最佳答案

#app/models/article.rb
class Article < ActiveRecord::Base
before_validation :generate_token, on: :create
validates :token, presence: true

private

def generate_token
self.token = loop do
random_token = SecureRandom.urlsafe_base64
break random_token unless self.class.exists? random_token
end
end
end

更好的方法是使用 has_secure_token (包含在 Rails 5 中;此处为 gem):

#Gemfile
gem "has_secure_token" #-> not needed for Rails 5

#app/models/article.rb
class Article < ActiveRecord::Base
has_secure_token
end

关于ruby-on-rails - Before_create 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35119978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com