你可能不知道的RoR 5点技巧

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你可能不知道的RoR 5点技巧相关的知识,希望对你有一定的参考价值。

  译者注:Ruby语言以其灵活性为人所称道,而Ruby on Rails使用了该语言的灵活性,本文作者列举了RoR五点不为人知的使用技巧。
  
  从开始使用Ruby on Rails到现在,几年过去了,我一直没有停止在Ruby的世界中探索。Ruby总能为开发者带来快乐,这些乐趣来源于从中寻求的一些新东西。
  
  这篇文章将分享我近期的一些新发现,包括一些很少使用的方法,多数”语法糖果”,它们并不是编写代码的必需品,但能让你的代码更加整洁。其中一些仅仅是Ruby或者Rails新版本出现的特性。
  
  Hash#dig
  
  拥有7年RoR开发经验的我最近发现,没有在任何人的代码中见过这个方法,原因很明显,因为工作使用的第一个Ruby版本是1.8,而该方法在2.3版本中引入。
  
  你是否曾多次写过这样的代码:
  
  ... if params[:user] && params[:user][:address] && params[:user][:address][:somewhere_deep]
  
  对于Hash对象可以考虑dig 作为安全导航操作符(&.),那么代码重写后如下:
  
  ... if params.dig(:user, :address, :somewhere_deep)
  
  Object#presence_in
  
  这个方法在一篇关于在Ruby on Rails中查询对象的非常好文章中见过。当你实际并不需要包含检查的布尔结果,而是检查对象本身时,它允许你通过简单的方法调用来替换条件(通常是三元)。比如这样的代码:
  
  ` sort_options = [:by_date, :by_title, :by_author] … sort = sort_options.include?(params[:sort]) ? params[:sort]
  
  :by_date
  
  Another option
  
  sort = (sort_options.include?(params[:sort]) && params[:sort]) || :by_date
  
  `
  
  下面这样写是不是更好?
  
  params[:sort].presence_in(sort_options) || :by_date
  
  Module#alias_attribute
  
  项目中使用遗产数据库时非常有用。它包含一个拥有奇怪列名(如SERNUM_0、ITMDES1_0)的表格,将表格映射到ActiveRecord模型,不是像WeirdTable.where(SERNUM_0: ‘123’)这样编写查询和范围,而是采用alias_attribute,因为它不仅仅产生getter和setter方法()还产生断言方法),并且查询也很有效率。
  
  alias_attribute :name, :www.senta77.com ITMDES1_0
  
  ...
  
  scope :by_name, -> (name) { where(name: name) }
  
  Object#presence
  
  相对而言,这个方法更加流行。在ApiDock上有非常好的解释。object.presence等同于:
  
  object.present? ? object : nil
  
  Module#delegate
  
  因为某些原因几乎不会被大部分开发者用到。方法的主要目的是解耦和遵循“得墨忒耳定律”。这个方面很有见解的文章是Avdi Grimm写的“得墨忒耳不仅是思想,还是定律。”此外,可以参阅“Rails最佳实践文章”利用delegate运用得墨忒耳定律。以下代码片段可以说明:
  
  class Profile < www.boyuanyl.cn ApplicationRecord
  
  belongs_to :user
  
  delegate :email, to: :user
  
  end
  
  ...
  
  profile.email # equivalent www.tkcyl1.com/ to profile.user.email
  
  希望你也能发现类似这样的有用的技巧,祝编码愉快!





































































以上是关于你可能不知道的RoR 5点技巧的主要内容,如果未能解决你的问题,请参考以下文章

你可能不知道的IDEA高级调试技巧

14 个你可能不知道的 JavaScript 调试技巧

你可能不知道的14个JavaScript调试技巧

聊聊 Chrome DevTools 中你可能不知道的调试技巧

你可能不知道的 Android Studio 小技巧之「多行编辑」

你可能不知道的7个HTML小技巧