Tôi hơi bối rối về cách hoạt động này ngay cả khi nó hoạt động đúng cách. Tôi có một mô hình có hai liên kết với cùng một mô hình khác.has_one và has_many trong cùng một kiểu máy. Đường ray theo dõi chúng như thế nào?
Công ty có chủ sở hữu và công ty có nhiều nhân viên của người dùng trong lớp.
đây là mô hình công ty của tôi:
class Company < ActiveRecord::Base
validates_presence_of :name
has_many :employee, :class_name => 'User'
has_one :owner, :class_name => 'User'
accepts_nested_attributes_for :owner, :allow_destroy => true
end
đây là mô hình người dùng của tôi:
class User < ActiveRecord::Base
include Clearance::User
attr_accessible :lastname, :firstname #other attr are whitelisted in clearance gem
validates_presence_of :lastname, :firstname
belongs_to :company
end
Bây giờ giả sử tôi có 3 nhân viên của công ty này bao gồm chủ sở hữu. Khi tôi lần đầu tiên tạo công ty, tôi đặt chủ sở hữu cho nhân viên có id 1 và hai người khác (2,3) được thêm vào danh sách nhân viên bằng cách đặt company_id của họ (user.company = company). Cả ba có company_id của họ được đặt thành id công ty mà chúng tôi có thể giả định là 1
khi tôi yêu cầu công ty.chủ sở hữu, tôi nhận đúng người dùng và khi tôi làm company.employee, tôi nhận được cả ba.
Nếu tôi thay đổi chủ sở hữu thành người dùng 2, nó sẽ tự động xóa người dùng 1 khỏi nhân viên bằng cách đặt từ company_id thành 0. Điều này là tốt và nếu tôi thêm anh ta trở lại như một nhân viên đơn giản tất cả vẫn còn tốt.
Làm cách nào mà đường ray biết đường nào? Ý tôi là làm thế nào để biết rằng một nhân viên là chủ sở hữu và không chỉ là một nhân viên? Không có gì trong lược đồ định nghĩa điều này.
Tôi có cảm giác mình nên đảo ngược liên kết của chủ sở hữu và biến công ty thuộc về một người dùng.
Đã kết thúc thực hiện việc này và ở phía người dùng, tôi đã thuộc về: chủ nhân:: class_name => "Company" mà tôi cần làm để ngăn chặn xung đột với user.company, giờ đây user.company là công ty và công ty được sở hữu .employer là ... bạn nhận được điểm: P – nkassis