0

のための未定義のメソッド「id_tagに」私はテーブルProductInfoからid_tagを取得したい:私CrawlProductクラスでActiveRecord_Associations_CollectionProxy

class CrawlProduct < ActiveRecord::Base 
    belongs_to :crawl_link 

    css_id = self.crawl_link.domain.product_infos.id_tag 
end 

テーブルCrawlProductscrawl_link外部キーを持つテーブルCrawlLinksは外部キーdomainれていもちろんテーブルDomainから来ます。 ProductInfoはドメインに属します。

class CrawlProduct < ActiveRecord::Base 
     belongs_to :crawl_link 
end 

class CrawlLink < ActiveRecord::Base 
     belongs_to :domain 
     has_one :crawl_product 
end 

class Domain < ActiveRecord::Base 
     has_many :crawl_links 
     has_many :product_infos 
end 

class ProductInfo < ActiveRecord::Base 
     belongs_to :domain 
end 

しかし、最後に、私はいつも次のエラーが表示されます

undefined method `id_tag' for #<ProductInfo::ActiveRecord_Associations_CollectionProxy:0x0055d72e423640> 

にはどうすればid_tagにアクセスすることができますか?私が知る限りでは、列の欠落はありません。

を編集してください。答えの後に別のエラーが表示されます。

NameError: undefined local variable or method `id_tag' for #<CrawlProduct:0x0055d72fcd9fe0> 

なぜこの問題が発生しているのですか。ここで私はid_tagを作成する方法である:あなたがeachと反復コレクションのどちらかあなたがすべき各項目にそれを呼び出すために、その上にインスタンスメソッドを呼び出すか、とのIDを収集することはできませんので

class Domain < ActiveRecord::Base 
    domain = Domain.create(domain: 'https://www.example.com') 
    product_info = ProductInfo.create(domain: domain, id_tag: 'some content') 
end 

答えて

1

私はproduct_infosに間違ってアクセスしていると思います。必要なものを指定し、そこからid_tagにアクセスする必要があります。関係はhas_manyのであるから

Railsは正しく

undefined method `id_tag' for #<ProductInfo::ActiveRecord_Associations_CollectionProxy:0x0055d72e423640> 

ことを語っています。あなたは(あなたが指定しない限り、ない特定の順序で)だけでデータベースが引き出す最初の1にアクセスしたい場合は

、あなただけの

css_id = self.crawl_link.domain.product_infos.first.id_tag 

編集行うことができます:あなたの助けのためにタイプミス

1

self.crawl_link.domain.product_infosは、インスタンスのコレクションですmap。インスタンスを作成せずに、単にIDを収集するには、あなたはpluckを使用することができます。

self.crawl_link.domain.product_infos.pluck(:id_tag) 
1

self.crawl_link.domain.product_infosはそうオブジェクトのグループを返します、あなたがコレクションからid_tag(フィールド)を取得することはできません。

代わりに、を使用できます。

class CrawlProduct < ActiveRecord::Base 
    belongs_to :crawl_link 

    def some_action 
     css_ids = self.crawl_link.domain.product_infos.pluck(:id_tag) 

     (or) 

     css_ids = self.crawl_link.domain.product_infos.map(&:id_tag) 
    end 
end 
+0

おかげで、しかし、私はまだエラーが発生しています。私は自分の質問を編集しました – GoYoshi

+0

これらの行を使用しているアクションを追加してください – Sravan

+0

モデルから直接 'css_id'を呼び出していますか? – Sravan

関連する問題