Hey all, Tôi có một cái gì đó của một yêu cầu thú vị cho dự án của tôi. Tôi cần một mối quan hệ has_one
, nơi nó là một trong hai lớp hoặc khác, nhưng không có thừa kế. Tôi có thể lấy đi thừa kế nếu đó là cách duy nhất, nhưng hai bản ghi liên kết có dữ liệu hoàn toàn khác nhau và không liên quan gì cả.RoR: has_one "hoặc khác"? (Hoặc, đa hình mà không có thừa kế.)
Điều tôi cần tìm hiểu là điều gì đó như sau.
# 1. Foo never belongs to anything.
# 2. Foo MUST have one assigned sub-record for validity.
# 3. Foo can only have either Bar or Baz assigned.
# 4. Bar and Baz have only ONE common property, and aren't
# related in either data or implementation.
class Foo < ActiveRecord::Base
# Attributes: id, name, value
has_one :assignment, :foreign_key => 'assigned_to', :readonly => true
# Could really use an :object_type for has_one here...
end
class Bar < ActiveRecord::Base
# Attributes: name,...
end
class Baz < ActiveRecord::Base
# Attributes: name,...
end
đâu Foo
có một nhiệm vụ, loại hoặc Bar
hoặc Baz
; họ chỉ chia sẻ một cột chung, vì vậy có lẽ tôi có thể tạo một đối tượng cha mẹ từ đó. Tuy nhiên, nếu tôi làm cho chúng kế thừa từ một đối tượng chung (khi dữ liệu mà chúng chứa thực sự là cam và táo), tôi có phải tạo một bảng cho bản ghi không? Có lẽ tôi có thể thoát khỏi nó nếu hồ sơ là một hồ sơ trừu tượng, nhưng các em thì không?
Tôi giả sử bây giờ bạn có thể thấy khó khăn của mình. Tôi khá mới đối với RoR nhưng yêu thích nó cho đến nay. Tôi chắc chắn có một cách xung quanh điều này, nhưng tôi sẽ bị xỉn nếu tôi không thể tìm ra nó là gì.
Điểm tốt, tuy nhiên đôi khi chúng tôi không được tự do hoàn toàn về cách cơ sở dữ liệu được thiết kế hoặc cách dữ liệu có liên quan. Đặc biệt là khi làm việc với một sản phẩm hoặc thư viện được sản xuất bởi người khác. Hai mối quan hệ has_one sẽ hoạt động tốt; Cảm ơn bạn đã hiểu biết của bạn. –