2011-01-09 34 views
14

Tôi đang lấy một số dữ liệu từ API bên ngoài và muốn lưu vào bộ nhớ cache kết quả cục bộ. Tôi có một class SearchTerm, mà tôi muốn được liên kết với một vài loại ActiveRecord khác nhau thông qua bảng searchable_items. Tôi khá chắc chắn rằng tôi có các bảng thiết lập chính xác, nhưng một cái gì đó trong các hiệp hội của tôi phải sai.Rails đa hình has_many: thông qua

class Foo < ActiveRecord::Base 
    has_many :search_terms, :as => :searchable, :through => :searchable_items 
end 

class Bar < ActiveRecord::Base 
    has_many :search_terms, :as => :searchable, :through => :searchable_items 
end 

class SearchTerm < ActiveRecord::Base 
    has_many :searchables, :through => :searchable_items 
end 

class SearchableItem < ActiveRecord::Base 
    belongs_to :search_term 
    belongs_to :searchable, :polymorphic => true 
end 

tôi mong chờ để có thể làm điều gì đó như SearchTerm.find_by_term('SearchTerm').searchables (và nó sẽ trả về một mảng của Foo và Bar đối tượng) Tuy nhiên, tôi nhận được lỗi Could not find the association :searchable_items in model SearchTerm

Cảm ơn trước cho bất kỳ cái nhìn sâu sắc bạn có thể cung cấp cho tôi!

Trả lời

11

Bạn cần thêm liên kết has_many :searchable_items vào Foo, BarSearchTerm mô hình vì tùy chọn :through => :searchable_items đề cập đến liên kết đó.

http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

+5

Thật không may, thêm những gì bạn đề nghị cung cấp cho 'không thể có một has_many: thông qua hiệp hội 'searchterm # searchables' trên đối tượng đa hình 'Searchable # searchable'.' – lyricat

+8

thiết lập tương tự ở đây: http: // stackoverflow. com/questions/1683265/activerecord-has-many-through-và-đa hình-hiệp hội – Heikki

+3

Giống như thông báo lỗi nói, bạn không thể có nhiều thông qua liên kết trên đối tượng polymorpic. Bạn có thể có riêng biệt có nhiều thông qua cho 'Foo' và' Bar' như trong câu hỏi được liên kết ở trên. – Heikki

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