2014-01-30 41 views
0


我有三個表:
product(ID,姓名)
image(ID,SRC)
product_images(產品,image_id,位置)
位置字段是產品形象的序號。
Product_images是連接表。
也有三個模型中的Rails 4:如何將值設置爲Rails 4中連接表的附加列?

class Product < ActiveRecord::Base 
    has_many :product_images, class_name: "ProductImage" 
    has_many :images, through: :product_images 
end 

class Image < ActiveRecord::Base 
    has_many :product_images 
    has_many :products, through: :product_images, foreign_key: :product_id 

    accepts_nested_attributes_for :product_images, allow_destroy: true 

end 

class ProductImage < ActiveRecord::Base 
    self.table_name = "product_images" 

    belongs_to :product 
    belongs_to :image 

    #has_many :images 
    #accepts_nested_attributes_for :image, :allow_destroy => true 
    #attr_accessible :position 

end 

在控制器:爲#圖片 未定義的方法`位置=」:

def test 
    @pr = Product.new name: "Super Sofa" 
    @imgs = Image.find(19, 20) 
    @imgs[0].position = 1 
    @imgs[1].position = 2 
    @pr.images = @imgs 
    @pr.save 
end 

導軌返回此錯誤0x68696e8

如何通過Image模型將位置字段設置爲product_images表?可能嗎?也許我對accep_nested_attributes_of有錯誤的理解。
可能是純SQL在這種情況下更好?
謝謝。

回答

2
product_images (product_id, image_id, position) 

您在產品圖像下屬於圖像的位置屬性。

def test 
    @pr = Product.new name: "Super Sofa" 
    @imgs = Image.find(19, 20) 
    @imgs[0].product_image.first.position = 1 
    @imgs[1].product_image.first.position = 2 
    @pr.images = @imgs 
    @pr.save 
end 

您需要指定要更改哪個產品圖像,因爲您的圖像可能具有產品圖像。如果你打電話給職位,那麼必須在產品形象上,除非你這樣做。

class Image < ActiveRecord::Base 
def position 
    self.product_images.first.position 
end 
end 

但是,這是沒有意義的,因爲那麼位置屬性應該在圖像表下,而不是產品圖像表。想一想。

+0

謝謝您的回覆。對於零
'未定義的方法'位置=」:但兩者這些變體的生成錯誤NilClass'
我曾嘗試這樣的代碼:
@imgs [0] .product_images [0] = ProductImage.new位置:1 此代碼不會生成錯誤,但是「位置」字段爲空。出於某種原因,分配後@imgs [0] .product_images [0]爲'Nil'。
>>位置屬性應不產品圖像表
圖像可以由幾種產品被包括在圖像桌子底下,因此圖像可以具有用於每個'product'不同'position'。 – ElCoyote

相關問題