2012-03-23 31 views
18

Wow Tôi đã đấu tranh với điều này cả ngày, sau khi "chính thức" ruby ​​trên đường ray tài liệu hướng dẫn, và chỉ phát hiện ra rằng tôi có thể đã được misguided bởi tài liệu tất cả cùng. Tôi chỉ muốn xác nhận xem điều này có đúng không.Ruby on Rails hướng dẫn tài liệu về liên kết Activerecord không chính xác?

Nếu bạn truy cập http://guides.rubyonrails.org/association_basics.html và dưới 2,10. tự tham gia phần nó nói:

class Employee < ActiveRecord::Base 
    has_many :subordinates, :class_name => "Employee" 
    belongs_to :manager, :class_name => "Employee", 
    :foreign_key => "manager_id" 
end 

Bây giờ, tôi là một newbie và chỉ tin vào mã này (tôi có thể làm gì khác?) và viết một số mã đó là một biến thể của tự này tham gia vụ việc. Tuy nhiên, tôi càng nhìn vào nó thì càng cảm thấy không đúng. không phải là :subordinates phải có trường :foreign_key thay vì :manager? Dù sao tôi vừa thay đổi nó sao cho mã giống như sau:

class Employee < ActiveRecord::Base 
    has_many :subordinates, :class_name => "Employee", :foreign_key => "manager_id" 
    belongs_to :manager, :class_name => "Employee" 
end 

và bây giờ nó đang hoạt động. Tui bỏ lỡ điều gì vậy? Hay là tài liệu chính thức sai? Thật khó để tin rằng tài liệu chính thức sẽ trình bày thông tin không chính xác nhưng có lẽ đó là cách của nó.

+2

Vâng, bạn nói đúng. Một hiệp hội có tên là 'quản lý' dĩ nhiên sẽ giả định chính xác khóa ngoại lệ' manager_id'. Và sau đó hiệp hội 'cấp dưới' sẽ giống như vậy giả định rằng 'ngoại lệ' không hợp lệ' subordinate_id' để đó là cái cần thay đổi. – DanneManne

+6

Tôi gửi cam kết cho tài liệu, sửa lỗi này – MikDiet

+0

Tôi thấy cách: foreign_key => 'manager_id' được đặt chính xác.Đến chừng nào tôi biết ngoại lệ đi cùng với phần thuộc tính của quan hệ.I muốn xem ví dụ về những gì bạn gọi là "... và giờ nó đang hoạt động" .Tất nhiên, tôi có thể thiếu một thứ gì đó. – Daniel

Trả lời

1

Đúng vậy, the guide document không chính xác tại thời điểm viết bài này.

belongs_to không cần tùy chọn :foreign_key vì AR sẽ phỏng đoán manager_id từ tên của liên kết ("người quản lý"). Theo tài liệu, AR sẽ nêu ra một lỗi khi, cho một nhân viên @dwight một cố gắng để @dwight.subordinates, vì AR sẽ sử dụng employee_id trong điều kiện WHERE của câu lệnh SELECT.

Theo AR documentation chuyển tùy chọn :foreign_key thành has_many kết quả trong việc khai báo FK sẽ được sử dụng khi tạo truy vấn cho @dwight.subordinates.

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