【发布时间】:2015-10-08 22:12:28
【问题描述】:
假设我有以下 STI 模型
class Parent < ActiveRecord::Base
has_many :childs, foreign_key: 'parent_id' # forgive the english for sake of simplicity
#def childs
# Child.where(parent_id: id) # this works just fine BTW
#end
end
class BadParent < Parent
end
class GoodParent < Parent
end
和下面的子类
class Child
belongs_to :parent # parent_id lives on this
end
我不关心在 Child 上设置类型,所以我不关心创建多态关联。
bad_parent = BadParent.create(name: 'Michael Jackson')
child = Child.create(name: 'Bobby', parent: bad_parent)
如果我跑了
child.parent #=> <# BadParent > # AWESOME
bad_parent.childs #=> [] NO BUENO!!!
sql_statement = bad_parent.childs.to_sql #=> "SELECT `childs`.* FROM `childs` WHERE `childs`.`parent_id` = 1"
Child.find_by_sql(sql_statement) #=> [<# Child Object #>] BUENO!!!
有什么我必须添加到关联中才能像find_by_sql 这样工作吗?
【问题讨论】:
-
我不确定我是否理解。你有 #childs 方法和 has_many :childs 关联。你想用哪一个?
-
对于初学者来说,您应该使用正确的复数形式
children以避免错误。
标签: ruby-on-rails activerecord