介绍

你好,我是莫基奥。 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

相关文章:

  • 2022-12-23
  • 2021-10-04
  • 2022-12-23
  • 2022-12-23
  • 2022-01-01
  • 2021-09-07
  • 2021-09-20
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-27
相关资源
相似解决方案