2013-02-14 16 views
17

Aynı tabloya başvuran iki alanla nasıl geçiş yapabilirim? A ve görüntü tablolarım var. A.image1_id görüntüyü referans gösterecektir ve A.image2_id ayrıca görüntüyü referans alacaktır. Sadece 2 tane görüntü var, pek fazla değil. BenTek bir tabloda aynı modele birden çok referansla geçişi nasıl eklerim? Ruby/Rails

class AddFields < ActiveRecord::Migration 
    def change 
    change_table(:ticket) do |t| 
     t.references :image1_id 
     t.references :image2_id 
    end 
    end 
end 

kullanırsanız bunu sonuna başka _ID katacak ve muhtemelen 'image' modelini kullanmayı bilmiyor çünkü bu işe sanmıyorum. Ayrıca, bunlardan iki tane daha nasıl ekleyebilirim? Ben de

create_table :images do |t| 
    t.belongs_to :ticket 
    t.string :file 

ekleme hakkında düşünce Ama sadece 2, çok değil istiyor ve bu ticket.image1 veya ticket.image2 gibi, biletten görüntüye almak izin görünmüyor.

bulabildiğim tüm bu belgelere http://apidock.com/rails/v3.2.8/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table göre, t.references ya herhangi bir bağımsız değişken almak görünmüyor.

change_table(:suppliers) do |t| 
    t.references :company 
end 
+0

Şimdi bence bir ilişki oluşturmalı ve 'before_save' filtresi ya da' validate: my_validation' ile 2 kayıt arasındaki ilişkiyi sınırlandırmalıyım. – Chloe

cevap

28

Eğer göçler içinde add_column yöntemle sadece bunu ve sınıflarında uygun ilişkileri kurabilirsiniz:

class AddFields < ActiveRecord::Migration 
    def change 
    add_column :tickets, :image_1_id, :integer 
    add_column :tickets, :image_2_id, :integer 
    end 
end 

class Ticket < ActiveRecord::Base 
    belongs_to :image_1, :class_name => "Image" 
    belongs_to :image_2, :class_name => "Image" 
end 

class Image < ActiveRecord::Base 
    has_many :primary_tickets, :class_name => "Ticket", :foreign_key => "image_1_id" 
    has_many :secondary_tickets, :class_name => "Ticket", :foreign_key => "image_2_id" 
end 

Bu blog yazısı, Creating Multiple Associations with the Same Table, daha ayrıntılı anlatır.

+3

Sağ, 't.references: x' yalnızca t.column için kestirme' dir: x_id,: integer' veya 't.integer: x_id'. –

+0

Yani 'ticket.image1' kullanabilmek için t.references'a ihtiyacım yok mu? – Chloe

+0

Muistooshort'ın dediği gibi, bu bir kolaylık metodu. Sizinki muhtemelen farklı bir yardımcı yöntem kullanmak daha iyi olan özel bir durumdur. – rossta

İlgili konular