【问题标题】:Rails - how to refactor this code, that queries on some optional arguments?Rails - 如何重构这段代码,查询一些可选参数?
【发布时间】:2015-12-12 10:02:43
【问题描述】:

如何在不更改其签名的情况下重构此方法(即无法更改它以接收选项哈希)

def find_or_create_user(name, email=nil, age=nil, gender=nil)
    users = User.where(name: name)
    users = users.where(email: email) if email
    users = users.where(age: age) if age
    users = users.where(gender: gender) if gender
    users.first_or_initialize
end

【问题讨论】:

  • 你想重构什么?
  • 好像没有那么优雅,违反了DRY

标签: ruby-on-rails coding-style refactoring


【解决方案1】:

你真的可以用这个来摆脱first_or_create_by

@user = User.first_or_create_by name: "Name", age: 54, email: "email@email.com"

如果你真的想自己动手,你必须使用class method - 不是你现在拥有的instance method

#app/models/user.rb
class User < ActiveRecord::Base
   def self.find_or_create *args
      args.extract_options!
      find_or_create_by args
   end
end

这应该允许您创建:

User.find_or_create name: "Richard", age: "5", email: "tester@tester.com"

...与find_or_create_by基本相同

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多