假设我有一张“用户”表。一个用户可以在我的表中存在 3 次(记录),处于 3 个不同的状态(state1、state2、state3)。首先将创建 state1,然后创建 state2,...如果 state3 存在,我不想再查看 state1 和 state2,但我必须将它们保留在我的表中,以备后用。所有 3 条记录都具有相同的 uuid。
如果我想收集所有用户,我不能使用 User.all (因为他会给我同一个用户的所有 3 个状态)。
在我的模型中有一个简短的解决方案吗?现在我正在收集所有 uuid,对于每个 uuid,我将检查哪个是最新状态,然后将这些记录放入一个数组中。这个数组的问题在于它只是一个“数组”,而不是一个 ActiveRecord 对象。
@uuid = []
@users = [] #will contain only the latest states at the end
User.all.each do |u|
@uuid << u.uuid unless @uuid.includes?(u.uuid)
end
@uuid.each do |u|
if user = User.find_by_state_and_uuid(3, u)
@users << user
elsif user = User.find_by_state_and_uuid(2, u)
@users << user
elsif user = User.find_by_state_and_uuid(1, u)
@users << user
end
end
有什么想法可以将这个逻辑转换为 ActiveRecord 对象吗?
简而言之:User.magic_function 只返回每个 uuid 的最新状态
提前致谢!沃特