9

Tôi đã chơi xung quanh với STI và mối quan hệ thuộc về/has_many và tôi hơi bối rối.Rails Câu hỏi: thuộc_to với STI - làm thế nào để tôi làm điều này một cách chính xác?

Tôi có một vài câu hỏi dựa trên một cấu hình mô hình tương tự như:

class Parental < ActiveRecord::Base 
end 

class Mother < Parental 
    has_many :babies 
end 

class Father < Parental 
    has_many :babies 
end 

class Baby < ActiveRecord::Base 
    belongs_to :?????? 
end 
  1. gì nên Baby belong_to?
  2. Về di chuyển, tôi nên đặt tên/thêm khóa ngoại vào số bảng babies là gì?
  3. Tôi đã có một thời gian khó khăn nghiên cứu này, có một nguồn dứt khoát giải thích điều này? Các tài liệu API dường như không đánh nó trên đầu HOẶC tôi đã bỏ qua nó (điều này hoàn toàn có thể).

Suy nghĩ đầu tiên của tôi là thêm parental_id để babies cùng với một phương pháp như Baby#owner nào sau đây:

  • Hits self.parental
  • Xác định loại của cha mẹ
  • Trả về đúng loại cha mẹ (có thể là một người mẹ, có thể là một người cha)

Tha nk bạn!

Trả lời

7

Các Baby thuộc về cả hai MotherFather

belongs_to :mother 
belongs_to :father 

Bạn có thể có nhiều phím nước ngoài. Bảng Baby DB sau đó có hai lĩnh vực, mother_idfather_id

Hướng dẫn dứt khoát để các hiệp hội là ở đây: http://guides.rubyonrails.org/association_basics.html

Việc chuyển đổi sang tạo lớp Baby sẽ giống như thế này:

class CreateBabies < ActiveRecord::Migration 
    def self.up 
    create_table :babies do |t| 
     t.integer :father_id 
     t.integer :mother_id 
    end 
    end 

    def self.down 
    drop_table :babies 
    end 
end 

này cung cấp cho bạn những thứ như: baby.motherbaby.father. Bạn không thể có một đơn parental_id vì khóa ngoại chỉ có thể trỏ đến một bản ghi khác, có nghĩa là trẻ sẽ chỉ có một phụ huynh (khi thực sự chúng có hai).

Có vẻ như, trong trường hợp này, bạn chỉ hiểu lầm mối quan hệ, là tất cả. Bạn đang đi đúng hướng.

+0

Cảm ơn bạn đã trả lời. Tôi có thể làm phiền bạn nhìn @ cập nhật của tôi và bình luận về giải pháp đó?có vẻ như lộn xộn bàn ít hơn, nhưng có thể hoàn toàn sai. –

+0

Chắc chắn, tôi đã nhận xét về giải pháp 'parental_id', nó sẽ không hoạt động. – jefflunt

+0

AH! Điều đó có ý nghĩa hoàn toàn. Cảm ơn một lần nữa. Tôi đã đánh dấu câu trả lời của bạn là giải pháp. Tôi có một theo dõi q rằng hy vọng không phải là quá nhiều bận tâm. Như bạn đã đề cập, trong tình huống này bạn thực sự cần HAI chủ sở hữu khi còn nhỏ (ngoài Chúa Giêsu) sẽ luôn có hai cha mẹ. Bạn làm gì khi đối tượng thuộc quyền sở hữu chỉ có thể thuộc về 1 chủ sở hữu? Ví dụ, nói một 'Post' và thiết lập STI là' Author', 'LivingAuthor

3

Tôi đã tự khắc phục được sự cố tương tự bằng cách thêm lệnh gọi ngoại quốc rõ ràng.

Something như đoạn mã sau:

class Parental < ActiveRecord::Base 
end 

class Mother < Parental 
    has_many :babies 
end 

class Father < Parental 
    has_many :babies 
end 

class Baby < ActiveRecord::Base 
    belongs_to :mother, foreign_key: 'parental_id' 
    belongs_to :father, foreign_key: 'parental_id' 
end 

Tất nhiên, điều này giả định rằng một em bé chỉ có một mẹ. :-)

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