我遇到了 Formtastic 不显示来自具有 has_many 多态关系的相关表中的信息的问题。
有四种模型在起作用:NPC、玩家、能力和外部参照能力。但我目前只关心两个:Player 和 Xref_Ability
我已经违反了交叉引用表的命名约定,因为 xref_ability 与 NPC 以及玩家相关联。请参阅下面的 Xref_Ability 和 Player 的模型关系:
播放器
class Player < ActiveRecord::Base
attr_accessor :characterable
...
has_many :xref_abilities, :as => :characterable
#has_many :xref_abilities, :through => :characterable
accepts_nested_attributes_for :xref_abilities
end
Xref_Ability(NPC 和玩家等能力的交叉参考表)
class XrefAbility < ActiveRecord::Base
attr_accessible :ability_id, :characterable_id, :characterable_type
#Validation
validates :ability_id, :uniqueness => {:scope => [:characterable_id, :characterable_type]}
#Relations
belongs_to :ability
belongs_to :characterable, :polymorphic => true
end
我已经添加了accepts_nested_attributes_for
尽可能多的人似乎遇到了没有这个问题的问题。但是,一旦我包含了它,我就不能:xref_abilities
在我的输入中使用 for 循环;收到错误:uninitialized constant Player::Xrefability
。所以我尝试使用:characterable
它返回null:
<div class="show">
<%= semantic_form_for @Player do |f| %>
<h1><%= @Player .name %></h1>
<%= f.inputs %>
<%#= f.input :characterable, :collection => XrefAbility.all %>
<%= f.inputs :for => :characterables do |abil| %>
<%= abil.input :ability_id %>
<% end %>
<% end %>
</div>
你可以看到我尝试收集并返回一个包含所有记录的下拉列表......不是我想要的。我还尝试使用条件执行 .find_each 而不是 .all,这给了我一个无块(屈服)错误。
我知道这与多态关系以及 Xref_ability 不是 Player 独有的有关。它也与 Player 没有直接关系。如果我知道如何做到这一点,那么也许我可以解决这个问题。我在 gitHub 上找不到任何东西,所以建议表示赞赏。