关联模型和更新属性

时间:2012-11-15 11:35:05

标签: ruby-on-rails associations has-many-through

我有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中找到直通记录,然后在投资组合项目图像上设置位置。

我觉得有一种更清晰的Ruby / Rails方式可以用ActiveRecord做到这一点。但我在谷歌上找不到任何东西。每次我加入Google协会时,通常会弹出Rails指南,但我找不到那里的信息。

另外,我对Image模型没有多少控制权。

感谢您的时间!

更新: 该图像也是先前创建的。所以我无法通过PortfolioItem创建它,然后添加属性。谢谢!

1 个答案:

答案 0 :(得分: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)