0

こんにちは、協会について誰か助けてくれませんか?1 つのプレビュー画像と多数の記事画像を含む記事があります。画像は多くの記事に使用できます。だから私のモデルは次のとおりです。

class Article 
  has_many :article_images
  has_many :main_images, :class_name => "Image", :through => :article_images
  has_one  :preview_image, :class_name => "Image", :through => :article_images
end

class ArticleImage
  belongs_to :article
  belongs_to :preview_image, :class_name => "Image", :foreign_key => :image_id, :conditions => ["images.itype = 'preview_image'"]
  belongs_to :main_image, :class_name => "Image", :foreign_key => :image_id, :conditions => ["images.itype = 'main_image'"]
end

class Image < ActiveRecord::Base
  has_many :article_images
  has_many :articles
end

問題は、このコードでエラーが発生することです:

ActiveRecord::HasOneThroughCantAssociateThroughCollection: Cannot have a has_one :through association 'Article#preview_image' where the :through association 'Article#article_images' is a collection. Specify a has_one or belongs_to association in the :through option instead

次のような preview_image の新しい関連付けを記事に作成すると:

has_one :article_image
has_one  :preview_image, :class_name => "Image", :through => :article_image

正しく動作していないようです。誰かが私に解決策を提案してもらえますか

前もって感謝します

4

2 に答える 2

3

previewテーブルの上に列を作りarticle_imagesます。次に、次のことを行います。

class Article 
  has_many :article_images
  has_one  :preview_image, :class_name => "ArticleImage", :conditions => {:preview => true}
end

class ArticleImage
  belongs_to :Article
end
于 2012-12-19T17:12:20.957 に答える
0

あなたの「ArticleImage」は正しくないようです。「プレビュー画像」と「メイン画像」の両方に属します (任意のタイプの単一の画像が必要な場合)。そのモデルが意味を持つ唯一の方法は、これら 2 つのプロパティの 1 つだけが値を持ち、もう 1 つが null であるという制約を追加することです。

また、ArticleImage には他にもプロパティがありますか? プレビュー画像に :through 関連付けを行う理由 作らない理由:

class Article 
  has_many :article_images
  has_many :main_images, :class_name => "Image", :through => :article_images
  belongs_to  :preview_image, :class_name => "Image"
end

そして、このクラスに唯一のプレビュー画像の外部キーがありますか?

于 2012-12-19T17:27:58.603 に答える