介绍
你好,我是莫基奥。 Rails中Model中定义的常量在实践中经常用到Controllers和Views中,那么如何引用呢?我想,所以我想把我检查的内容作为备忘录留下。
结论
引用常量模型名(Ruby 中的类名)::常量名你可以参考它
MAIN_USERS = ["Bob", "Keny", "John", "July", "Karen"].freeze
User::MAIN_USERS
# => ["Bob", "Keny", "John", "July", "Karen"]
具体例子
现在让我们进入一个具体的例子。这一次,当您注册为用户时,有一个字段可以输入 SNS 的 URL。当时我想写一个模式,其中我想省略的 URL 被预先注册为常量,如果实际输入的 URL 和定义的常量部分匹配,则在验证期间显示警报。
首先,让我们在模型中定义经常使用的常量。 .freeze 方法使其不可修改。
应用程序/模型/user.rb
SNS_URLS = ["youtube.com", "twitter.com", "instagram.com", "tiktok.com"].freeze
然后,在控制器中编写条件分支。写作风格与视图相同。
if User::SNS_URLS.any?{ |url| params.require(:user)["url"].include?(url) }
flash.now[:alert] = "SNSのURLを再度確認してください。"
end
条件分支部分有点复杂,但是检查输入的 URL (params.require(:user)["url"]) 是否与每个常量 URL 部分匹配。
.any?是有匹配时返回true的方法,所以当找到部分匹配的URL时,会判断为true并显示alert。
另外,如果分解解释一下,{ |url| params.require(:user)["url"].include?(url) }部分是写成块的,不过这是对循环处理的简化说明。
没有简化,它看起来像
# ["youtube.com", "twitter.com", "instagram.com", "tiktok.com"].each do |url|
User::SNS_URLS.each do |url|
if params.require(:user)["url"].include?(url)
flash.now[:alert] = "SNSのURLを再度確認してください。"
end
end
后记
令人惊讶的是,我无法想象如何写它,所以直到我当时查到它时,我才想到如何引用它。
将来作为备忘录对我有用吗?微笑
非常感谢您观看到最后! !
如果您能在 Twitter 上看到它,我将不胜感激,因为我在日常工作中喃喃自语。
@mokio_50
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308624523.html