如何根据另一个数组中的值向数组中的每个ActiveRecord添加新属性?

问题描述:

一如既往,当涉及到帮助时,您无法替代。我遇到了一个新问题。如何根据另一个数组中的值向数组中的每个ActiveRecord添加新属性?

我有两个模型。

User(id: integer) 
Follower(id: integer, source_user_id: integer, target_user_id: integer) 

我通过get params[:user_id]输入。我需要创建包含is_following => true/false的记录数组。当有跟随当前记录source_user_id = params[:user_id]

is_following应该是假的时,有没有存在此参数

什么是最有效的方式做到这一点跟随记录

is_following应该是真的吗?

谢谢!

+0

可以显示一些示例数据,问题不说清楚 – nickcen

+0

我找的用户列表,指定是否特定用户params [:user_id]跟随每个或不是。 – nebulus

用户模型修改

has_many :followers, class_name: 'Follower', foreign_key: :target_user_id 

def is_followed? follower_id 
    followers.where(:source_user_id => follower_id).exists? 
end 

和API

users = users.map {|user| { user: user, is_following: user.is_followed?(params[:user_id]) } } 

编辑以反映你想要什么的澄清。

User模型,称为is_following内定义一个辅助函数:现在

def is_following? 
    !Follower.where(source_user_id: self.id).empty? 
end 

,您可以使用地图的方法来创建一个数组。你必须有散列的数组,因为用户没有任何一种属性的存储布尔值:

User.all.map { |user| {user: user, is_following: user.is_following? } } 
+0

我不是在寻找追随者的名单。我正在寻找一个用户列表,指定一个特定的用户是否跟随每个用户。 – nebulus

+0

因此使用第二种解决方案 – Barnaby

+0

我不明白它的作用。我需要一个用户对象列表,第二个列出了一个Follower对象列表。 – nebulus

快速回答您的用户模型添加一个方法:

class User < ActiveRecord::Base 
    has_many :followers, foreign_key: :source_user_id 

    def is_following? follower_id 
    follower_ids.include? follower_id.to_i 
    end 
end 

然后:

user.is_following? params[:user_id] 

该协会是根据你的问题假设。 请注意,这是对您的问题的简短回答。您可能需要重新设计您的关联,将方法移至Decorator(取决于您的用例),并可能优化查询。

+0

谢谢,但是只有一些你的代码是正确的。 – nebulus

+1

首先,答案更倾向于给你一个想法,因为你的问题没有包含真正的代码片段。请用有效的代码片段重新提出您的问题,以便参考。 –

+0

感谢您的帮助!但是,其他用户向您提供信用是不公平的。他也给了一点点。 – nebulus