【发布时间】:2012-06-26 05:18:16
【问题描述】:
在 has_many :through 关联中的 Activerecord 查询需要一些帮助。
型号:
工作
class Job < ActiveRecord::Base
has_many :job_metadata, :dependent => :destroy
has_many :metadata, :through => :job_metadata
元数据
class Metadatum < ActiveRecord::Base
attr_accessible :description, :metadata_type_id
has_one :metadatum_type
has_many :job_metadata, :dependent => :destroy
has_many :jobs, :through => :job_metadata
元数据类型
class MetadatumType < ActiveRecord::Base
attr_accessible :description
has_many :metada
工作元数据
class JobMetadatum < ActiveRecord::Base
attr_accessible :job_id, :metadatum_id
belongs_to :job
belongs_to :metadatum
在控制台中,我可以运行:
@job.metadata
返回
=> [#<Metadatum id: 2, description: "Part Time", metadatum_type_id: 1, created_at: "2012-06-23 20:42:14", updated_at: "2012-06-23 20:42:14">]
但是我将如何返回 @jobs.metadata 上具有 metadatum_type_id = 1 的 metadatum_id?
我正在尝试这个:
@job.metadata.metadatum_id.where('metadata.metadatum_type_id' => 1)
但出现以下错误:
NoMethodError: Metadatum Load (0.3ms) SELECT "metadata".* FROM
"metadata" INNER JOIN "job_metadata" ON "metadata"."id" =
"job_metadata"."metadatum_id" WHERE "job_metadata"."job_id" = 31
undefined method `metadatum_id'
for #<ActiveRecord::Relation:0x007f7fb3188de8>
【问题讨论】:
-
关于 has_any :through 最关键的事情是在最初得到正确的模型名称。元数据和元数据非常非英语。我会先想出更好的名字。我从自己的经验中学到了这一点。
-
谢谢迈克尔。鉴于我正在努力完成的工作,我很乐意为这些模型命名的建议。
标签: ruby-on-rails activerecord