在帮助方面,你始终是不可替代的。我遇到了一个新问题。
我有两个模特。
User(id: integer)
Follower(id: integer, source_user_id: integer, target_user_id: integer)
我通过get获得params[:user_id]
输入。
我需要创建一个包含is_following => true/false
的记录数组。
is_following
有跟随者记录时, source_user_id = params[:user_id]
应该为真
如果此参数没有跟随者记录,则
is_following
应为false
最有效的方法是什么?
谢谢!
答案 0 :(得分:2)
在用户模型中添加方法的快速答案:
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(取决于您的用例)并优化查询。
答案 1 :(得分:1)
编辑以反映对您想要的内容的澄清。
在User
模型中定义一个名为is_following:
def is_following?
!Follower.where(source_user_id: self.id).empty?
end
现在,您可以使用map方法创建数组。你必须有一个哈希数组,因为用户没有任何类型的属性来存储布尔值:
User.all.map { |user| {user: user, is_following: user.is_following? } }
答案 2 :(得分:-1)
用户模型修改
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]) } }