2010-01-06 22 views
6

Đây có lẽ là một câu hỏi ngớ ngẩn, nhưng tôi dường như không thể tìm thấy câu trả lời hay. Tôi muốn biết cách tốt nhất để tham khảo lại mô hình mà một đối tượng thuộc về.Đường ray: Giới thiệu trở lại để mô hình đối tượng thuộc về

Ví dụ:

class User < ActiveRecord::Base 
    has_many :posts 
end 

class Post < ActiveRecord::Base 
    belongs_to :users 
end 

Vì vậy, để có được bài viết của người dùng, tôi có thể sử dụng user.posts, nhưng để có được người dùng của bưu điện, tôi không thể làm ngược lại: post.user

Nếu Tôi thêm một phương thức "user" vào mô hình Post, nó hoạt động, nhưng nó dường như không phải là cách tốt nhất.

class Post < ActiveRecord::Base 
    belongs_to :users 

    def user 
    User.find(self.user_id) 
    end 
end 

Nếu bạn nhìn vào bài viết trên blog này http://www.fortytwo.gr/blog/18/9-Essential-Rails-Tips làm ví dụ, bạn có thể thấy rằng các tác giả sử dụng post.user.username, mà không làm việc ra khỏi hộp cũng như: include => [: người dùng], cũng không hoạt động, ngay cả với phương thức "người dùng" trong mô hình Bài đăng.

Tôi biết điều này là thô sơ, vì vậy cảm ơn sự kiên nhẫn của bạn. Tôi chỉ muốn biết cách tốt nhất để hoàn thành mối quan hệ này.

Mục tiêu chính của tôi là để viết "tìm thấy" bằng cách sử dụng lồng nhau bao gồm, mà xem lại cho người dùng như vậy:

post = Post.find (: tất cả,: include => [: hướng dẫn])

Khi tôi thử điều này, tôi nhận được "ActiveRecord :: ConfigurationError: Hiệp hội có tên 'người dùng' không được tìm thấy; có lẽ bạn đã viết sai chính tả?"

Cảm ơn rất nhiều.

Trả lời

8

Tôi là một chút mới để Rails, nhưng điều này sẽ làm việc tự động ...

Ah - bạn đã đặt tên lớp cha mẹ trong bài viết như belongs_to :users; nhưng vì nó chỉ thuộc về một người dùng duy nhất, Rails đang mong đợi belongs_to :user (hoặc, tất nhiên, belongs_to :users, :class_name => "User").

Đó là:

class Post < ActiveRecord::Base 
    belongs_to :user 
end 

nên thực hiện công việc.

+0

Cảm ơn. Đây chính là câu hỏi ngu ngốc nhất mà tôi từng hỏi. Không thể tin rằng tôi không thấy điều đó. Tôi tự hỏi tại sao nó thậm chí hoạt động nếu bạn làm cho nó số nhiều ... – Shagymoe

0

Thuộc một mô hình phải ở dạng số ít. như

belongs_to :user 
Các vấn đề liên quan