簡體   English   中英

Rails Activerecord查詢has_many:through

[英]Rails Activerecord querying has_many :through

在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>

嘗試這個

@the_metadatum_record = @job.metadata.where("metadatum_type_id = 1").first

這將搜索屬於@job的Metadatum記錄,並瀏覽這些記錄以查找metadatum_type_id為1的記錄。

然后可以像@the_metadatum_record.id一樣訪問該id

“第一個”被添加到末尾,因為如果您的作業具有多個類型為1的元數據,則查詢將返回所有這些元數據。

另外,我也同意邁克爾的觀點,這些名字對於表格來說都是很糟糕的...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM