Ruby on rails Rails联合半相关数据的方法
我有以下代码片段来获取用户已订阅的所有类类型,以及用户尚未订阅的所有类类型,并将其显示在UI中。我使用的是订阅模式,因为它保存了我向用户显示的历史价格Ruby on rails Rails联合半相关数据的方法,ruby-on-rails,Ruby On Rails,我有以下代码片段来获取用户已订阅的所有类类型,以及用户尚未订阅的所有类类型,并将其显示在UI中。我使用的是订阅模式,因为它保存了我向用户显示的历史价格 @subscriptions = Subscription.where(user_id: current_user.id) subscription_ids = @subscriptions.pluck(:class_type_id) classtypes_not_subscribed_to = ClassType.where.not(id: s
@subscriptions = Subscription.where(user_id: current_user.id)
subscription_ids = @subscriptions.pluck(:class_type_id)
classtypes_not_subscribed_to = ClassType.where.not(id: subscription_ids)
classtypes_not_subscribed_to.each do |c|
@subscriptions << Subscription.new(class_type_id: c.id, price: c.price)
end
@subscriptions=Subscription.where(用户标识:当前用户标识)
订阅\u id=@subscriptions.pull(:class\u type\u id)
classtypes\u not\u subscribed\u to=ClassType.where.not(id:subscription\u id)
未订阅的类类型。每个都可以|
@订阅我建议您为类创建作用域,它确实使代码更干净
class Subscription
named_scope :of, lambda {|user| {
conditions: { user_id: user.id }
} }
end
class ClassType
named_scope :not_subscribed_for, lambda { |user|
subscribed_classes_ids = Subscription.of(user).all.pluck(:class_type_id)
{ conditions: ["id NOT IN ?", subscribed_classes_ids] }
}
end
然后您只需调用ClassType.not\u subscribed\u for(某些用户)
。当然,名字是任意的