首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查成员是否至少有一个有效成员?

如何检查成员是否至少有一个有效成员?
EN

Stack Overflow用户
提问于 2022-10-12 10:51:18
回答 1查看 27关注 0票数 0

我一直在设法解决我的问题,但没有结果。我正在检查输入的成员是否有活跃的会员资格。

代码语言:javascript
复制
class Entry < ApplicationRecord
  belongs_to :member
  before_create :status

  def status
    member = Member.find(member_id)
    if member.has_active_membership
      return true
    else
      return false
    end
  end
end
代码语言:javascript
复制
class Member < ApplicationRecord
    has_many :memberships
    has_many :passes, through: :memberships

    def has_active_membership
        self.memberships.active?
    end
end
代码语言:javascript
复制
class Membership < ApplicationRecord
  belongs_to :member
  belongs_to :pass

  def active?
    if (self.valid_until >= Date.today)
      return true
    else
      return false
    end
  end
end
代码语言:javascript
复制
undefined method `active?' for #<ActiveRecord::Associations::CollectionProxy [#<Membership id: 1, name: "XD", valid_from: "2022-10-01", valid_until: "2022-10-31", member_id: 2, pass_id: 2, created_at: "2022-10-01 19:41:43.186045000 +0000", updated_at: "2022-10-01 19:41:43.186045000 +0000">]>
Did you mean?  acts_like? //error for member.rb has_active_membership

我很难确定会员是否至少有一个活跃的会员。谢谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-12 11:02:57

问题是,您是在集合上调用active?,而不是在单个成员身份上调用

考虑到active?的实现方式,它不是一个作用域,您应该执行以下操作

代码语言:javascript
复制
def has_active_membership
  memberships.any?(&:active?)
end

另一种方法是将active实现为作用域。

代码语言:javascript
复制
scope :active, -> { where('valid_until >= ?', Date.today) }

然后

代码语言:javascript
复制
def has_active_membership
  memberships.active.exists?
end
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74040631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档