在一组实例上调用方法的标准方法是什么?

时间:2017-06-02 04:41:28

标签: ruby-on-rails arrays ruby

我试图找出在ruby on rails上为类实例数组编写方法的最佳方法。

我有以下解决方案:

class Asset < ActiveRecord::Base
  scope :owned_by, -> (user) { where(:user_id => user.id) }

  def self.get_tokens(user)
    all.owned_by(user).pluck(:tokens)
  end
end

我对解决方案并不完全满意,因为在类

上调用了该方法
Asset.get_tokens(user)

我宁愿在一组资产实例上调用它而不必在控制器中执行映射。像这样:

user_assets.get_tokens()

有没有一种标准方法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

首先,你不需要类方法,你可以直接调用范围,

class Asset < ActiveRecord::Base

  scope :owned_by, -> (user) { where(:user_id => user.id) }

end

使用,只需说Asset.owned_by(user)

要以反向形式(来自用户)获取记录,假设User has_many Asset

class User < ActiveRecord::Base

  def tokens
    assets.pluck(:tokens)
  end

end

可以称为User.find(1).tokens

答案 1 :(得分:0)

如果你想从数组中返回一个项目数组,而不是这样做......

array = []
some_collection.each do |item|
  array << item.value
end

你可以这样做:

array = some_collection.map(&:value) # same as some_collection.map { |item| item.value } 

相同
array = some_collection.pluck(:value)