ruby写这四条指令的最短路径是什么?

时间:2011-10-15 12:56:44

标签: ruby-on-rails ruby

u = User.email_equals("tabaluga@gmail.com").first
s = u.setting
s.regular_info = false
s.save

有谁知道怎么写得更短?也许在一条线上?那将是真棒。谢谢,merci:)

3 个答案:

答案 0 :(得分:4)

User.email_equals("tabaluga@gmail.com").first.setting.update_attribute(:regular_info, false)

(没有便于检查的控制台,但认为应该有效..)

答案 1 :(得分:4)

我不确定您如何定义您的email_equals方法,但Rails提供了基于动态属性的查找程序,它返回第一个匹配项或nil未找到。

User.find_by_email("tabaluga@gmail.com").setting.update_attribute(:regular_info, false)

答案 2 :(得分:0)

尽管您可以将其写成一行,但我还是建议不要这样做。这会使您的代码可读性和可维护性降低。

这也是一个孤立的例子;实际上,电子邮件不会经过硬编码,而是会存储在其自己的变量中,并且可能是参数。

一个班轮

User.email_equals("tabaluga@gmail.com").first.setting.update_attribute(:regular_info, false)

两条衬里

user = User.email_equals("tabaluga@gmail.com").first
user.setting.update_attribute(:regular_info, false)

# Or...
user_setting = User.email_equals("tabaluga@gmail.com").first.setting
user_setting.update_attribute(:regular_info, false)

# More readable, but not maintainable
User.email_equals("tabaluga@gmail.com").first \ 
  .setting.update_attribute(:regular_info, false)

三班轮

user = User.email_equals("tabaluga@gmail.com").first
setting = user.setting
setting.update_attribute(:regular_info, false)