0

私はスルー関係を持つ2つのモデルを持っています:

PortfolioItem
has_many :portfolio_item_images
has_many :images, :through => :portfolio_item_images

PortfolioItemImage
belongs_to :image
belongs_to :portfolio_item

ポートフォリオ アイテムの画像をポートフォリオ アイテムに関連付け、ポートフォリオ アイテムの画像の位置も設定したいと考えています。

今、私は次のようにしています:

i13 = PortfolioItem.create({:name => 'Portfolio Item 1'})
i13_img01 = Image.find_by_image_name('Portfolio_Item_Image.jpg')
i13.images << i13_img01
i13_portimg01 = i13.portfolio_item_images.find_by_image_id(i13_img01.id)
i13_portimg01.update_attributes(:position => 1)

これは、リレーションシップを設定し、イメージ ID からスルー レコードを見つけて、ポートフォリオ アイテム イメージの位置を設定しているため、かなり複雑です。

ActiveRecord でこれを行うには、Ruby/Rails のよりクリーンな方法があると感じています。しかし、Googleで何も見つかりませんでした。関連付けを Google で検索するたびに、通常は Rails ガイドがポップアップ表示され、そこに情報が見つかりませんでした。

また、私は Image モデルをあまり制御できません。

お時間をいただきありがとうございます!

更新: イメージも以前に作成されました。したがって、PortfolioItem を使用して作成し、属性を追加することはできません。ありがとう!

4

1 に答える 1

0

これはあなたのニーズに合うはずだと思います:

i13 = PortfolioItem.create({:name => 'Portfolio Item 1'})
i13.portfolie_item_images.create(image: Image.find_by_image_name('Portfolio_Item_Image.jpg'),
                                 position: 1)
于 2012-11-15T12:20:51.030 に答える