0

我遇到了 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 上找不到任何东西,所以建议表示赞赏。

4

1 回答 1

0

试试这个修改过的东西,它应该可以工作。

<div class="show">
  <%= semantic_form_for @Player do |f| %>
    <h1><%= @Player .name %></h1>
    <%#= f.inputs %>
    <%#= f.inputs :characterable, :collection => XrefAbility.all %>
    <%= f.semantic_fields_for :characterables do |abil| %>
      <%= abil.inputs :ability_id %>
    <% end %>
  <% end %>
</div>
于 2013-10-21T17:39:39.760 回答