2010-10-11 19 views
5

İlk Rails (3) Uygulam üzerinde çalışıyorum ve bir sürü veriyi toplamaya çalışıyorum.Diğer tohumlu modellere HABTM ilişkileri olan modelleri nasıl kurarsınız?

Yapmakta olduğum sorun şu ki, sadece ekim yaptığım diğer modellerle has_and_belongs_to_many ilişkisi olan bazı modelleri tohumlamak istiyorum. Doğru olanı yapıyorum ama beklediğim sonuçları alamıyorum.

class Asana < ActiveRecord::Base 
    has_and_belongs_to_many :therapeutic_foci 
end 

ve TherapeuticFocus modeli:

Bir Asana modeli (basitleştirilmiş) sahip benim db/seeds.rb olarak

class TherapeuticFocus < ActiveRecord::Base 
    has_and_belongs_to_many :asanas 
end 

, bazı TherapeuticFoci oluşturun:

tf = TherapeuticFocus.create([ 
    {:name => 'Anxiety'}, 
    {:name => 'Asthma'}, 
    {:name => 'Fatigue'}, 
    {:name => 'Flat Feet'}, 
    {:name => 'Headache'}, 
    {:name => 'High Blood Pressure'}, 
    {:name => 'Stress'} ]) 

Sonra bir Asana oluşturun:

asanaCreate = Asana.create!([ 
    { :english_name => 'Mountain Pose', 
    :traditional_name => 'Tadasana', 
    :pronunciation => 'TadaSANA', 
    :deck_set => 'Basic', 
    :type => 'Standing', 
    :therapeutic_foci => TherapeuticFocus.where("name in ('Stress','Flat Feet')")} 
]) 

Sonuç, TherapeuticFocus modellerinin oluşturulduğu, Asana'nın oluşturulduğu, ancak TherapeuticFocus modelleriyle olan ilişkileri oluşturmadığı sonucudur. Ortaya çıkan dizi boş.

Ben raylar konsolunda

TherapeuticFocus.where("name in ('Stress','Flat Feet')") 

çalıştırırsanız, beklediğim iki kayıtlar olsun:

Yani
irb(main):010:0> TherapeuticFocus.where("name in ('Stress','Flat Feet')") 
=> [#<TherapeuticFocus id: 6, name: "Flat Feet", description: nil, created_at: "2010-10-11  01:48:02", updated_at: "2010-10-11 01:48:02">, 
    #<TherapeuticFocus id: 19, name: "Stress",  description: nil, created_at: "2010-10-11 01:48:02", updated_at: "2010-10-11 01:48:02">] 

, kimse bu nasıl yapar? Ya da bunu yapmanın daha iyi bir yolu var mı?

Teşekkürler!

POST CEVAP: Ben t bu değişen çalışacağım

create_table :asanas_therapeutic_foci, :id => false do |t| 
    t.references :asana, :therapeutic_focus 
end 

: benziyor katılmak tablolar için

ActiveSupport::Inflector.inflections do |inflect| 
    inflect.irregular 'focus', 'foci' 
end 

Benim göç:

Zaten dönüm eklemişti. t.references yerine belongs_to ve işe yarayıp yaramadığını görün.

cevap

5

Çoğulluğu “odaklama” için kaydettiniz mi? (genellikle config/initializers/inflections.rb olarak) bunu tanımlamak gerekir, böylece varsayılan olarak tanımlanmadı:

ActiveSupport::Inflector.inflections do |inflect| 
    inflect.irregular 'focus', 'foci' 
end 

Ayrıca göç doğru tanımlamıştır emin olmak gerekir HABTM ilişkisi için masaya katılmak. İşte kullanılan “yukarı” göç ilgili parçasıdır: Eğer alıntı olarak

create_table :asanas do |t| 
     t.string :english_name 
     t.string :traditional_name 
     t.string :pronunciation 
     t.string :deck_set 
     t.string :type 
    end 
    create_table :therapeutic_foci do |t| 
     t.string :name 
    end 
    create_table :asanas_therapeutic_foci, :id => false do |t| 
     t.belongs_to :asana 
     t.belongs_to :therapeutic_focus 
    end 

Ben modellerini kullandım.

Bu bitler yerinde, tohum tanımlarınızı yükleyebildim.

+0

Aha, bunu anladım - Gelişimi izleyebileceğimi farkettim.Bir komisyon db'si sırasında oturum aç: kurulum ve sorunumun ": therapeutic_foci" özelliğinin atanabilir olmadığından kaynaklandığını gördüm. Bunu düzeltmek, her şey çalışıyor. Teşekkürler! –

İlgili konular