获取具有Rails关系的项



我有两个模型,它们的关系是这样的:

class Ticket < ActiveRecord::Base
belongs_to :group
end
class User < ActiveRecord::Base
has_and_belongs_to_many :groups
has_many :tickets, as: :assignable
end
class Group < ActiveRecord::Base
has_many :tickets, -> { order(:created_at) }
has_and_belongs_to_many :users
end

我需要获得属于用户拥有的相同组的所有门票。我怎么才能做到呢?非常感谢!

在目前的情况下,您的关系是不完整的,因此Rails将无法正常工作。如果用户has_many门票,那么门票必须是belong_to(或至少has_one)用户。或者,用户可以have_manythrough组,在这种情况下似乎更可能。

然而,即使这样,也不清楚你的组模型在做什么。特别是,它不清楚你打算如何将它与User联系起来——这看起来是一个相当复杂的关系。

首先,试着像这样设置模型:

class Ticket < ApplicationRecord
belongs_to :group
end
class Group < ApplicationRecord
belongs_to :user
has_many :tickets, dependent: :destroy
end
class User < ApplicationRecord
has_many :groups, dependent: :destroy
has_many :tickets, through: :groups
end

(您将看到我也从ApplicationRecord继承了这些模型,这就是我一直做的。)

如果您如上所述设置它,您可以使用简单的@user.tickets获取您的票据记录。

如果这有效,那么您可以为Groups和Users添加额外的HABTM关系。但请注意,HABTM关系可能很复杂,使用它们的方法有好有坏。

(如果你真正想要的主关系是Groups>用户在门票告诉我,我可以相应地调整。