16

Tôi có mối quan hệ rất nhiều trong đường ray. Tất cả các bảng cơ sở dữ liệu được đặt tên phù hợp và phù hợp. Tất cả các tệp mô hình đều có số nhiều và sử dụng dấu gạch dưới để phân tách các từ. Tất cả các thỏa thuận đặt tên được theo sau bởi các tiêu chuẩn ruby ​​và ray. Tôi đang sử dụng có nhiều thông qua trong các mô hình của tôi như thế này:ActiveRecord :: HasManyThroughAssociationNotFoundError trong UserController # welcome

has_many :users, :through => :users_posts #Post model 
has_many :posts, :through => :users_posts #User model 
belongs_to :users #UsersSource model 
belongs_to :posts #UsersSource model 

Lỗi khác này có thể là gì?

ActiveRecord::HasManyThroughAssociationNotFoundError in UsersController#welcome Could not find the association :users_posts in model Post

+0

chính xác cùng một vấn đề Giải quyết ở đây: http://stackoverflow.com/questions/944126/rails-has -many-through-problem – 18bytes

Trả lời

36

Bạn cần phải xác định tham gia mô hình như một hiệp hội riêng biệt khi sử dụng has_many :through:

class Post < ActiveRecord::Base 
    has_many :user_posts 
    has_many :users, :through => :user_posts 
end 

class User < ActiveRecord::Base 
    has_many :user_posts 
    has_many :posts, :through => :user_posts 
end 

class UserPost < ActiveRecord::Base 
    belongs_to :user # foreign_key is user_id 
    belongs_to :post # foreign_key is post_id 
end 

này hoạt động tốt nhất khi bạn cần để giữ cho dữ liệu liên quan đến tham gia mô hình riêng của mình, hoặc nếu bạn muốn thực hiện các xác nhận hợp lệ trên kết nối riêng biệt với hai mô hình khác.

Nếu bạn chỉ muốn có một đơn giản tham gia bảng, nó dễ dàng hơn để sử dụng cú pháp HABTM cũ:

class User < ActiveRecord::Base 
    has_and_belongs_to_many :posts 
end 

class Post < ActiveRecord::Base 
    has_and_belongs_to_many :users 
end