ruby-on-rails - 如何使用 ActiveRecord 让一个表中的两列指向另一个表中的同一列?

标签 ruby-on-rails ruby activerecord associations multiple-tables

我在这里冒着手掌到额头的风险,但我不太清楚如何使用 Rails 的 ActiveRecord 糖来做到这一点。

我有一个 tickets 表,它有两列(submitter_idassignee_id),每列都应该引用来自 的不同用户users 表(特别是 users 表中的 id 列)。我希望能够使用 ActiveRecord 的关联来执行诸如 ticket.submitter.nameticket.assignee.email 之类的事情。提交者和受让人只是不同关联名称下的用户对象。

我发现的唯一接近我正在做的事情是使用多态关联,但最后我相当确定这不是我真正需要的。我不会有多种类型,提交者和受让人都是用户,很可能是两个不同的用户。

任何帮助都会很棒。谢谢!

最佳答案

class Ticket < ActiveRecord::Base
  belongs_to :submitter, :class_name => "User"
  belongs_to :assignee, :class_name => "User"
end

应该可以。

编辑:没有尝试,我不确定您是否需要 :foreign_key 参数。我的直觉不是,但它不会造成伤害。

再次编辑:抱歉,离开了用户 -> 票证关联。您没有提到使用它们,如果我不打算在另一个方向上使用它们,我通常只会在一个方向上添加关联。

无论如何,试试:

class User < ActiveRecord::Base
  has_many :assigned_tickets, :class_name => "Ticket", :foreign_key => "assignee_id"
  has_many :submitted_tickets, :class_name => "Ticket", :foreign_key => "submitter_id"
end

关于ruby-on-rails - 如何使用 ActiveRecord 让一个表中的两列指向另一个表中的同一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1879014/

相关文章:

Ruby:在 Qt 中创建一个简单的应用程序

ruby-on-rails - 访问rails flash [:notice] in a model

ruby-on-rails - Rails ActiveRecord 插入/更新范围类型 (Postgresql)

ruby-on-rails - solr sunspot - 搜索belongs_to 关联

ruby-on-rails - Rails ActionMailer TSL 插件 - 发件人电子邮件问题

javascript - js.erb 传递参数错误

ruby-on-rails - 执行 "bundle install"后无法找到Gemfile

javascript - 如何抓取无限滚动页面?

html - 没有路由匹配缺少所需的键 : [:id]

sql - 组合 Active Record 组、连接、最大值和最小值