Rspec 难写难读,读的时候要把每层 context 的 before 和 let 都看一遍,才知道 case 的上下文是什么。
Minitest 是 plain Ruby,Ruby 的代码规范、重构方法、抽象逻辑都适用,懂得写好 Ruby 的也就懂得写好 Minitest。这也就是为什么 Rspec 的文章比 Minitest 多那么多,其实是 Rspec 里面乱七八糟的东西太多了。
Minitest 不推崇不必要的抽象。
It depends... https://tools.ietf.org/html/rfc7234
Rspec 可以让测试代码快速膨胀。
可以,没什么问题。
并不会,我贴下完整代码:
# File activemodel/lib/active_model/secure_password.rb, line 53
def has_secure_password(options = {})
# Load bcrypt gem only when has_secure_password is used.
# This is to avoid ActiveModel (and by extension the entire framework)
# being dependent on a binary library.
begin
require "bcrypt"
rescue LoadError
$stderr.puts "You don't have bcrypt installed in your application. Please add it to your Gemfile and run bundle install"
raise
end
include InstanceMethodsOnActivation
if options.fetch(:validations, true)
include ActiveModel::Validations
# This ensures the model has a password by checking whether the password_digest
# is present, so that this works with both new and existing records. However,
# when there is an error, the message is added to the password attribute instead
# so that the error message will make sense to the end-user.
validate do |record|
record.errors.add(:password, :blank) unless record.password_digest.present?
end
validates_length_of :password, maximum: ActiveModel::SecurePassword::MAX_PASSWORD_LENGTH_ALLOWED
validates_confirmation_of :password, allow_blank: true
end
end
这一行:
record.errors.add(:password, :blank) unless record.password_digest.present?
如果 password_digest 不存在,就会报 password 为空,这样创建用户的时候校验通不过。
源码:
validates_confirmation_of :password, allow_blank: true
如果 password 为空就不校验,所以你不要传 password 参数(去掉表单项)就行。
你的问题可以简化为:
class A
def a_method
"call from a"
end
end
class B
def b_method
a_method
end
end
B 定义在 A 里面和外面对于实例方法并没有什么不同——实例方法需要通过实例调用。
想要用 B 调用 A 的方法,那么 new 一个实例:
class B
def b_method
A.new.a_method
end
end
奥,你定义了自己的 Ruby 语法。这个语法在 MRI 里不能执行,也许自己写一个解释器可以。
你提问都说了“跨作用域”,跨作用域当然是不能访问拉。
X-Y Problem http://coolshell.cn/articles/10804.html
楼主已匿
这里不容忍人身攻击,早几十楼就应该封了。
大文件直传云储存。
很多人还是搞不懂关键在于“提问的方式”而不是“问题的深浅”。
说 StackOverflow 好的有看过 StackOverflow 的提问须知吗?
不要拿用功的提问者和热心的回答者的劳动成果当作自己伸手的理由,你可以去 StackOverflow 提问试试。
StackOverflow 的功能和运营都很好,他们有一个机制让高阶用户帮初学者纠正提问(或者 -1),Ruby China 是纯自发组织,没有那么多精力。我能做的就是把提问的智慧再一次挂在显眼位置 https://ruby-china.org/topics/24325
如果还是不理解,我想社区和业界都不会有什么损失,损失的只有提问者自己。
赞,提点建议:
那么你要怀疑证书是不是真的有问题了:本地证书没更新、翻墙管道用了假证书、VPS 服务商替换了假证书……
我希望大家先做好 CRUD 程序员。
不用了,https 设置有冲突。
该不该用 devise 没有一个共识 https://ruby-china.org/topics/15738
在 ruby 里面要把支付宝公钥加上换行,每行长度参考自己的公钥。
Alipay::Client
现在接入就用新的了,还有沙盒环境。楼主密钥已泄漏,记得换一个。
Alipay::Mobile::Service 是老版接口,不是我开发的也无法调试,建议用 openapi 分支搭配新接口。
这叹号让我不想回复。
用 openapi 分支了吗?贴代码