需要帮助Activerecord在has_many中查询:通过关联。
型号:
作业
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
MetadatumType
class MetadatumType < ActiveRecord::Base
attr_accessible :description
has_many :metada
JobMetadatum
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_id,其中 metadatum_type_id = 1?
我正在尝试这个:
@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>
答案 0 :(得分:1)
试试这个
@the_metadatum_record = @job.metadata.where("metadatum_type_id = 1").first
搜索属于@job的Metadatum记录,并查看这些记录以查找metadatum_type_id为1的记录。
然后可以像@the_metadatum_record.id
&#34;第一&#34;添加到最后因为如果你的作业有多个类型1的元数据,查询将返回所有这些元素。
另外,我同意迈克尔的观点,那些桌子的名字很糟糕......