Rails:进行多次查找调用或将用户对象传递给多个方法更好吗?

时间:2016-03-11 00:04:23

标签: ruby-on-rails

最好是传递一个简单的ID并让多个ActiveRecord查找查询:

def some_method(user_id)
  @user = User.find(user_id)
  SomeClass.call_method(user_id)
end

class SomeClass
  def call_method(user_id)
    @user = User.find(user_id)
  end
end

或者将实际的ActiveRecord对象传递给不同的方法?

def some_method(user_id)
  @user = User.find(user_id)
  SomeClass.call_method(@user)
end

class SomeClass
  def call_method(user)
    @user
  end
end

1 个答案:

答案 0 :(得分:0)

第二个选项似乎是更好的选项,因为您只进行一次数据库调用。 在第一个版本中,第二个数据库调用可能会被缓存,因此可能很快,但似乎没必要。

同样从设计的角度来看,我认为给方法一个User对象而不是id是更好的做法。通过为方法提供对象,它不必知道有关如何检索User对象的任何信息。因此,如果您更改了应用程序以便用户来自不同的数据源(例如Web服务),则此方法不会受到影响。