0

我有一个component模型has_many :framework。要将框架与我编写的表单中的组件相关联:

<div class="field">
  <%= f.label :frameworks %><br />
  <%= f.collection_select :frameworks, Framework.all, :id, :name, {}, {:multiple => true}  %>
</div>

但现在这给了我:

Framework(#70243540172600) expected, got String(#70243531874180)

还有一个问题:

如何使用按钮隐藏/显示此 div?因为列表可能很大。

4

1 回答 1

0

如果组件 has_many :frameworks,则不能使用 collection_select。

在这种情况下,形式为:

<%= f.collection_select :frameworks, Framework.all, :id, :name ... etc... {:multiple => true} %>

将返回 params[:component][:frameworks] = ["3", "4", "55"]。但是 component.frameworks - 是一个只接受框架对象的关联,但是你传递字符串!

您必须使用手工制作的访问器,它将接受字符串化整数数组(框架的 ID):

class Component < ActiveRecord::Base
  attr_accessible :framework_ids

  def framework_ids=(ids)
    ids.each do |framework_id|
      frameworks << Framework.find(framework_id)
    end
  end
end

然后你的表单选择器必须看起来像:

<%= f.collection_select :framework_ids, Framework.all, :id, :name ... etc... %>

按钮呢……你必须学习JQuery UI的东西。

于 2012-12-18T13:50:50.387 回答