2010-10-11 43 views
5

Tôi đang làm việc trên Ứng dụng Rails đầu tiên (3) của tôi và tìm cách gộp một loạt dữ liệu.Làm thế nào để bạn mô hình hóa các mối quan hệ HABTM với các mô hình hạt giống khác

Vấn đề tôi gặp phải là tôi muốn tạo một số mô hình có mối quan hệ has_and_belongs_to_many với các mô hình khác mà tôi vừa mới tạo. Tôi đang làm những gì có vẻ đúng, nhưng tôi không nhận được kết quả tôi mong đợi.

Tôi có một mô hình Asana (giản thể):

class Asana < ActiveRecord::Base 
    has_and_belongs_to_many :therapeutic_foci 
end 

và mô hình TherapeuticFocus:

class TherapeuticFocus < ActiveRecord::Base 
    has_and_belongs_to_many :asanas 
end 

Trong db của tôi/seeds.rb, tôi tạo ra một số TherapeuticFoci:

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

Sau đó, tạo Asana:

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')")} 
]) 

Kết quả là các mô hình TherapeuticFocus được tạo ra, Asana được tạo ra, nhưng nó không tạo ra các mối quan hệ với các mô hình TherapeuticFocus. Mảng kết quả trống.

Nếu tôi chạy

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

trong đường ray giao diện điều khiển, tôi nhận được dự kiến ​​hai kỷ lục:

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">] 

Vì vậy, làm thế nào để làm điều này?

Hoặc, có cách nào tốt hơn để thực hiện việc này không?

Cảm ơn!

POST ĐÁP:

tôi đã thêm uốn:

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

di cư của tôi cho các bảng tham gia trông giống như:

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

Tôi sẽ cố gắng thay đổi này để t. thuộc_to thay vì t.references và xem nếu nó hoạt động.

Trả lời

5

Bạn có đăng ký số nhiều cho "tiêu điểm" không? Nó không phải được định nghĩa theo mặc định, vì vậy bạn sẽ cần phải định nghĩa nó (thường là trong config/initializers/inflections.rb):

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

Bạn cũng cần phải đảm bảo chuyển đổi của bạn đã xác định chính xác tham gia bảng cho các hiệp hội HABTM. Đây là phần thích hợp của di chuyển “lên” mà tôi đã sử dụng:

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 

Tôi đã sử dụng các mô hình như bạn đã trích dẫn.

Với những bit đó tại chỗ, tôi có thể tải định nghĩa hạt giống của bạn.

+0

Aha, tôi đã tìm ra - Tôi nhận ra mình có thể theo dõi sự phát triển.đăng nhập trong một db rake: thiết lập, và thấy rằng vấn đề của tôi bắt nguồn từ thuộc tính ": therapeutic_foci" không được chuyển nhượng hàng loạt. Sửa chữa nó, tất cả đều hoạt động. Cảm ơn! –

Các vấn đề liên quan