如何根据另一个数组中的值向数组中的每个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
应该是真的吗?
谢谢!
答
用户模型修改
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? } }
答
快速回答您的用户模型添加一个方法:
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(取决于您的用例),并可能优化查询。
可以显示一些示例数据,问题不说清楚 – nickcen
我找的用户列表,指定是否特定用户params [:user_id]跟随每个或不是。 – nebulus