0

我多態性有通過關聯簡單的形式不加載動態地創建的關聯

# a/m/documnet.rb 
class Document < ActiveRecord::Base 
has_many :possessions, as: :belonging 
has_many :clients, :through => :possessions, :source => :owner, :source_type => 'Client' 
end 

在意見控制檯

Document.new.clients 
#=> [] 

用簡單的形式

= f.association :clients, as: :check_boxes, collection: Client.all 

它的工作原理沒有問題很多。

-

問題開始時我想動態關聯具有簡單形式

= f.association :clients, as: :check_boxes, collection: Client.all 

無線意見很多資源

class Document < ActiveRecord::Base 
    has_many :possessions, as: :belonging 

    def self.possession_owner_classes 
    [Client, SomethingElse] 
    end 
    possession_owner_classes.each do |possession_class| 
    has_many possession_class.model_name.underscore.pluralize, :through => :possessions, :source => :owner, :source_type => possession_class.model_name 
    end 
end 

在控制檯

Document.new.clients 
#=> [] 

會拋出

Association :clients not found 

so Rails知道這個關聯,但是簡單的表單不會: - /有什麼想法嗎?

+0

只是提醒:請注意協會工作正常,只有當我動態創建它時纔會出現問題 – equivalent8

回答

1

確定我發現錯誤,

has_many possession_class.model_name.underscore.pluralize, :through => :possessions, :source => :owner, :source_type => possession_class.model_name 

應該

has_many possession_class.model_name.underscore.pluralize.to_sym, :through => :possessions, :source => :owner, :source_type => possession_class.model_name 

所以協會名稱必須是符號不串

:clients # ok 
'clients' # will blow up 

呵呵: - \