我试图找出在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()
有没有一种标准方法可以做到这一点?
答案 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)