当前位置: 首页 > 知识库问答 >
问题:

has_many使用错误的列

郭永安
2023-03-14

我有一个简单的rails应用程序。它包含两个模型。员工和员工经理。我基本上希望一个员工有一个或多个经理(其他员工),我希望能够像您期望的那样查询这些经理。

这是我的员工:

class Employee < ActiveRecord::Base
  attr_accessible :name
  has_many :employee_managers
  has_many :managers,  through: :employee_managers
  has_many :employees, through: :employee_managers
end

而经理模式:

class EmployeeManager < ActiveRecord::Base
  attr_accessible :employee_id, :manager_id
  belongs_to :employee, foreign_key: "employee_id"                                                                                                        
  belongs_to :manager, class_name: "Employee", foreign_key: "manager_id"
end

这在我看来没问题,但是当我去查询员工和经理时,员工Rails使用相同的列(employee_id=X):

irb(主):008:0

如何修复最后一个查询?它应该使用manager_id而不是employee_id!

提前感谢:)

共有1个答案

方寒
2023-03-14

在员工模型中设置foreign_key,并添加和反转关系(这是相同的模型)

class Employee < ActiveRecord::Base
  has_many :employee_managers
  has_many :managers, through: :employee_managers

  has_many :manager_employees, :class_name => "EmployeeManager", :foreign_key => "manager_id"
  has_many :employees, through: :manager_employees, :source => "Employee"
end

其他变化:

您不需要attr_accessible: nameattr_accessible:employee_id,:manager_id。只需为不在数据库中的字段添加attr_accessible。

 类似资料:
  • 我有一个非常复杂的类来编写Junit测试用例。我决定使用PowerMockito,因为要为其运行测试的类具有构造函数初始化。 我的主课是这样的:

  • 问题内容: 我在ubuntu上使用npm v1.0.104 / node 0.6.12-在尝试通过npm安装任何新模块时收到以下复制的错误(我之前使用http而不是https测试了socket.io,但我想知道是否可以导致npm / unsigned证书出现问题)。一旦npm尝试解析“ https://registry.npmjs.org ” URL,该错误就会弹出。无论如何,我可以忽略该错误,或

  • 问题内容: 我正在尝试使用Ajax.BeginForm()从我的控制器发布Json结果(我正在使用MVC3)。调用Json结果时,应将其发送到javascript函数并使用提取对象 但是,在尝试调用Ajax POST时,它只会引发“ Microsoft JScript运行时错误:对象不支持此属性或方法”。 我的代码: 控制器: 视图: 奇怪的是,完全相同的代码可以在MVC2中使用-这是一个错误,还

  • 我在使用HTTPUrlConnection时遇到了一些问题。代码基本上是在循环中运行的,每次都连接到不同的URL,检查响应,如果响应满足某些条件,则退出。我被StackOverflowerr搞砸了,但我不确定自己搞砸了什么。我没有使用

  • 我正在使用intelliJ 2017.3 CE,我有一个奇怪的行为,我不能解决,虽然我尝试了我发现这个话题的一切。 为了简单起见,我提取了问题的根本原因,IntelliJ在我的例子UTF-8中没有使用所需的编码。下面是我的简单课程: 运行这个类会导致以下输出: 在这里你可以看到文件的编码 我尝试的是: 添加到我的gradle.properties: system Prop.file.encodin

  • 我最近转到了Eclipse的Intellij 2017 IDEA。 使用此方法时: 多谢了。