Tôi có một mô hình User
có nhiều kiểu projects
và Project
mô hình có thể có nhiều users
, nhưng cũng thuộc về một người dùng (tức là người dùng đã tạo dự án này). Nó phải thuộc về một User
. Nó cũng cho phép một danh sách người dùng được liên kết với nó, nghĩ rằng sự cộng tác.Rails có nhiều và thuộc về một
Với điều này trong tâm trí, mô hình của tôi trông như thế này:
class User < ActiveRecord::Base
has_many :assigned_projects
has_many :projects, :through => :assigned_projects
end
class Project < ActiveRecord::Base
belongs_to :user
has_many :assigned_projects
has_many :users, :through => :assigned_projects
end
class AssignedProject < ActiveRecord::Base
belongs_to :user
belongs_to :project
end
Bây giờ, khi tôi muốn tạo một dự án mới thông qua một User
, đây là cách tôi sẽ làm điều đó:
user = User.create(:name => 'injekt')
user.projects.create(:name => 'project one')
Bây giờ, tôi biết rằng projects
được cung cấp thông qua mô hình tham gia AssignedProject
, đó là lý do tại sao project.user
sẽ trả lại nil
. Những gì tôi đang cố gắng để có được đầu của tôi là cách tốt nhất để chỉ định người tạo dự án (theo cách này không phải là cần là user
, có thể là creator
hoặc mô tả khác, miễn là loại User
).
Ý tưởng sau đó là tạo phương thức trả lại projects_created
từ số User
sẽ chỉ chọn dự án được tạo bởi người dùng này. Trường hợp user.projects
tất nhiên sẽ trả về TẤT CẢ các dự án mà người dùng được liên kết.
Giả sử loại liên kết này là khá phổ biến, cách tốt nhất để đạt được những gì tôi muốn là gì? Bất kỳ hướng nào được đánh giá cao.
Cảm ơn câu trả lời của bạn, đây không phải là vấn đề của tôi. Đó là: * Những gì tôi đang cố gắng để có được đầu của tôi là cách tốt nhất để chỉ định người sáng tạo dự án (mà theo cách này không cần phải là người dùng, nó có thể là người sáng tạo hoặc mô tả khác, miễn là thuộc loại Người dùng). * –
@Nuby chắc chắn về điều gì? Chắc chắn rằng tôi đang cố gắng để có được đầu của tôi xung quanh giao người dùng/người sáng tạo cho dự án một cách tự động? yes –
Trừ khi tôi đọc nhầm câu trả lời của @ Pavling (và câu hỏi của bạn), những gì anh ấy đề xuất là bạn tạo mối quan hệ thứ hai với bảng Người dùng, được gọi là 'Người sáng tạo'. Sau đó bạn có thể gọi 'Project.creator' để có được người dùng liên quan từ hiệp hội' CreatedProjects'. Điều đó sẽ giải quyết (tôi nghĩ) vấn đề của bạn. Theo như cách gán nó, bạn có thể làm một hook 'before_create' trong mô hình để gán nó cho người dùng hiện đang đăng nhập, hoặc một người dùng khác (tùy thuộc vào logic của dự án của bạn). – Nuby