【发布时间】:2016-01-15 02:46:46
【问题描述】:
我正在使用一个数据库结构,其中Node 与Interviewees 中的两个可能字段之一相关(clientnode_id 或caregivernode_id):
tbl_nodes
+----+-----------+
| id | node_Name |
+----+-----------+
| 5 | some name |
+----+-----------+
tbl_interviewees
+----+---------------+------------------+
| id | clientnode_id | caregivernode_id |
+----+---------------+------------------+
| 1 | 5 | NULL |
+----+---------------+------------------+
我只是想在节点模型中定义一个has_many,其中包含来自任一字段的匹配项。等效的 SQL 将是:
SELECT * FROM tbl_nodes LEFT JOIN tbl_interviewees ON (tbl_nodes.id=tbl_interviewees.clientnode_id OR tbl_nodes.id=tbl_interviewees.caregivernode_id)
我目前尝试了以下链接的建议无济于事(大多数使用不推荐使用的语法):
Rails 3: Use of lambda with scopes in model
Rails has_many with dynamic conditions
http://guides.rubyonrails.org/association_basics.html#belongs-to-association-reference Rails has_many conditions
可能只是语法有些复杂,因此我们将不胜感激。我知道这是错误的,但这是我最近的尝试:
class Node < ActiveRecord::Base
self.table_name_prefix = :tbl_
has_many :interviewees, -> { where("clientnode_id=? OR caregivernode_id=?", self.id, self.id) }
end
【问题讨论】:
标签: ruby-on-rails ruby activerecord