我正在努力找出完成关系和遇到麻烦的最好方法。我遇到过一些文章,这些文章有点解决了我想要做的事情,但并不完全。
我有一个用户模型和一个Tickets模型。两者都通过UserTickets模型连接,因此我可以将多个用户分配给故障单。我想要做的是将分配给故障单的用户分段为请求者和代理。如果用户是请求者或代理,则Users模型没有任何要声明的列,而是我有is_admin,is_customer等。我认为我需要的是Ruby On Rails - many to many between the same table,但并不完全。
理想情况下,我想让我的Tickets表获取agent_id(来自User类的user_id)和requester_id(来自User类的user_id)而不是一般user_id(来自User类的user_id,它将所有用户组合成一个组)。我认为仍然允许我调用@ current_user.tickets来提取分配给该用户的所有票证。
以下是我的用户模型:
has_many :user_tickets
has_many :support_tickets, through: :user_tickets
以下是我的门票型号:
has_many :user_tickets
has_many :users, through: :user_tickets
以下是我的UserTickets加入模型:
belongs_to :user
belongs_to :support_ticket
非常感谢您的帮助!
这不重复。
答案 0 :(得分:0)
@Skylar,
1)如果您的目标是将多个用户分配给故障单?因为这并不需要多对多的关系。您只需要在User模型上使用一对多关系和一个布尔属性agent?
。如果您更喜欢这样,您甚至可以创建使用用户模型的代理模型。
2)但是,如果您想创建多对多关系,请查看this。 Rails文档比我写的要好。请参见2.6 has_and_belongs_to_many关联。
解决1)
模型
class User < ApplicationRecord
has_many :tickets, class_name: :Ticket, foreign_key: :agent_id
def agent?
self.agent
end
end
class Agent < User
default_scope { where(agent: true) }
end
class Ticket < ApplicationRecord
belongs_to :user
belongs_to :agent, class_name: :User
end
迁移
class CreateTickets < ActiveRecord::Migration[5.0]
def change
create_table :tickets do |t|
t.references :user, index: true
t.references :agent, index: true
t.string :event_name
t.timestamps
end
end
end