7

Tôi có nguy cơ bị trán ở đây, nhưng tôi không thể tìm ra cách để làm điều này với đường ActiveRecord của Rails.Làm cách nào để có hai cột trong một điểm bảng với cùng một cột trong cột khác với ActiveRecord?

Tôi có một bảng tickets rằng có hai cột (submitter_idassignee_id) rằng mỗi nên tham khảo một người dùng khác nhau từ users bảng (đặc biệt là id cột trong bảng users). Tôi muốn có thể thực hiện những việc như ticket.submitter.nameticket.assignee.email bằng cách sử dụng các liên kết của ActiveRecord. Người gửi và Người được chỉ định đơn giản là các đối tượng người dùng dưới các tên liên kết khác nhau.

Điều duy nhất tôi tìm thấy gần với những gì tôi đang làm là sử dụng các mối liên hệ đa hình, nhưng cuối cùng tôi khá chắc chắn rằng nó không thực sự là những gì tôi cần. Tôi sẽ không có nhiều loại, cả người gửi và người được chuyển nhượng sẽ là người dùng và rất tốt có thể là hai người dùng khác nhau.

Mọi trợ giúp đều tuyệt vời. Cảm ơn!

Trả lời

14
class Ticket < ActiveRecord::Base 
    belongs_to :submitter, :class_name => "User" 
    belongs_to :assignee, :class_name => "User" 
end 

shoul d làm việc.

Chỉnh sửa: Không dùng thử, tôi không chắc bạn có cần tham số: thông số ngoại kiều hay không. Bản năng của tôi thì không, nhưng nó không thể đau.

Chỉnh sửa lại: Xin lỗi, đã thoát khỏi Người dùng -> Liên kết vé. Bạn đã không đề cập đến việc sử dụng chúng, và tôi thường sẽ chỉ thêm các hiệp hội theo một hướng nếu tôi không có kế hoạch sử dụng chúng theo một hướng khác.

Dù sao, hãy thử:

class User < ActiveRecord::Base 
    has_many :assigned_tickets, :class_name => "Ticket", :foreign_key => "assignee_id" 
    has_many :submitted_tickets, :class_name => "Ticket", :foreign_key => "submitter_id" 
end 
+0

Chắc chắn là một khoảnh khắc từ bàn tay đến trán. Tôi biết nó đã ở đó, nhưng không thể truy cập vào bộ nhớ mà tôi đoán. Cảm ơn vì đã giúp tôi ở đây! – localshred

+0

Câu trả lời này đã lưu chúng tôi rất nhiều thời gian, hãy cảm ơn bạn_. – potashin

5

Something như thế này nên làm việc

class Ticket < ActiveRecord::Base 
    belongs_to :submitter, :class_name => 'User', :foreign_key => 'submitter_id' 
    belongs_to :assignee, :class_name => 'User', :foreign_key => 'assignee_id' 
end 

class User < ActiveRecord::Base 
    has_many :tickets, :class_name => 'Ticket', :foreign_key => 'submitter_id' 
    has_many :tickets_assigned, :class_name => 'Ticket', :foreign_key => 'assignee_id' 
end 

Vâng, PreciousBodilyFluids là đúng, chúng ta không cần phải xác định foreign_key trong lớp Ticket như đường ray có thể suy ra nó từ tên cột, tức là submitter_id và assignee_id

Nhưng nếu tên hiệp hội của bạn là khác nhau từ column_name_ {id} sau đó bạn sẽ phải xác định nó, tức là trường hợp lớp người dùng

+0

Chìa khóa nước ngoài là không cần thiết trong việc kê khai belongs_to nếu nó có thể được bắt nguồn từ tên hiệp hội. – EmFi

+0

Bạn đúng và đó là lý do tại sao tôi cũng đã đề cập đến nó trong câu trả lời của tôi :) – nas

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