我正在尝试学习如何在Rails中编写范围。
我有用户,组织和组织请求的模型。协会是:
User
has_one :organisation
Organisation
belongs_to :owner, class_name: 'User'
has_many :organisation_requests
Organisation_request
belongs_to :organisation
在我的组织请求模型中,我尝试编写一个范围来挑选属于该组织所有者的所有组织请求。
scope :same_org, where(:organisation_id => owner.organisation_id)
然后在我的organisation_requests控制器中,我有:
def index
@organisation_requests = OrganisationRequest.same_org
end
我尝试了以上内容。所有者是用户的别名。在每个组织中,一个用户被提名为该组织的所有者。我希望该用户查看该所有者组织的组织请求索引。
有谁能看到我在这里做错了什么?我不了解如何编写范围。
答案 0 :(得分:2)
在你的模型中,试试这个:
scope :same_org, -> {where(:organisation_id => owner.organisation_id) }
答案 1 :(得分:1)
赞成的回答是错误的(没有个人的, @Hasmukh Rathod ) - organisation_id
表中没有users
列(反之亦然 - 有一个{ user_id
表格中的{1}}列。
我建议采用以下解决方案:
organisations
具有上述范围,您需要做的是将scope :same_org, ->(owner_id) { joins(organisation: :user).where(users: { id: owner_id }) }
作为参数传递。我确信有一种方法可以让它在没有通过范围的论证的情况下工作,但我还不确定如何(我刚刚醒来:D)。
所以例子:
owner_id