tôi có các mô hình thiết lập của tôi như vậy:Rails belongs_to không thiết lập id chính nước ngoài với tên lớp tùy chỉnh
class User < ActiveRecord::Base
has_many :posts, :foreign_key => 'author_id'
end
class Post < ActiveRecord::Base
belongs_to :author, :class_name => 'User'
end
Giả sử:
p = Post.first # just any post instance
a = User.first # any user instance
Bây giờ đoạn mã này là hành động rất lạ
p.author = a
Sau khi đặt tác giả, thuộc tính author_id
của bài đăng phải được đặt thành id của người dùng. Nhưng điều này không xảy ra.
Tôi đã thử sử dụng các kiểu có belongs_to
không có tham số class_name
và mọi thứ hoạt động như mong đợi.
Bây giờ, một điều nữa khiến nó trở nên kỳ quặc hơn là khi tôi thay đổi liên kết thành belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
, nó hoạt động đáng ngạc nhiên.
Đây có phải là lỗi trong Rails 3.0.9 không? Không nên tham số khóa ngoài là không cần thiết vì như các tài liệu nói, giá trị mặc định của nó là tên của hiệp hội nối với _id
.
Cũng lưu ý rằng ngay cả khi không có :foreign_key => 'author_id'
, mọi thứ khác về liên kết đều hoạt động như mong đợi. (Giống như tìm nạp mô hình liên quan) Điều duy nhất không hoạt động là phương thức setter không thiết lập khóa ngoài.
Tôi biết tôi chỉ có thể làm p.author_id = a.id
hoặc chỉ cần thêm :foreign_key
params cho tất cả các hiệp hội của tôi với class_name
, nhưng tôi thích cú pháp tao nhã hơn p.author = a