3

我设置了 2 个模型,如下所示:

class Sector < ActiveRecord::Base
  attr_accessible :summary, :title, :sector_ids

  belongs_to :platform
end

class Platform < ActiveRecord::Base
attr_accessible :name, :url
    has_many :sectors
end

以及尝试使用此处示例的表单,如下所示:

<%= simple_form_for @platform, :html => { :class => 'form-vertical'} do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs">
    <div class="row-fluid">
        <div class="span12">
            <div class="span6">
              <%=  field_set_tag "General" do %>
    <%= f.input :name %>
    <%= f.input :url %>
<%= f.collection_check_boxes :sector_ids, Sector.all, :title, :title %>

    <% end %>
</div>
</div>
</div>
  </div>

  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end %>

然而,在我尝试提交表单后,我收到以下错误:

无法批量分配受保护的属性:sector_ids

我在这里想念什么?在添加适当的关联后,我成功迁移了数据库,但似乎 Rails 不知道现在如何使用所选的扇区 ID。

解决方案 :

class Sector < ActiveRecord::Base
  attr_accessible :summary, :title

  belongs_to :platforms
end

class Platform < ActiveRecord::Base
attr_accessible :name, :url, :platform_attributes, :sector_ids
    has_many :sectors
end

在视图中:

<%= f.association :sectors, :as => :check_boxes %>

当然,不要忘记运行“ rake db"migrate”,以防你还没有完成。我还需要重新启动服务器才能应用更改。

我希望这可以帮助别人。

4

2 回答 2

4

尝试将 { :sector_ids => [] } 添加到您的平台许可列表中。

https://github.com/rails/strong_parameters#nested-parameters

于 2013-04-15T17:16:38.583 回答
2

首先,我认为您应该从Sector的attr_accessible中删除:sectors_ids并尝试。

如果上述方法不起作用(可能不起作用),请参阅simple_form的文档,特别阅读https://github.com/plataformatec/simple_form#associationshttps://github.com/plataformatec/simple_form#collection -复选框;最后一个实现了你想要做的事情,但是,在他们使用has_and_belongs_to_many关联的关联中。

最后,检查一下https://github.com/plataformatec/simple_form/issues/341

更新 解决方法是建立一个has_and_belongs_to_many关系,没有出路,因为,你想将一些扇区关联到一个平台,但是,你想将相同的扇区关联到其他平台,否则你不需要复选框,只需嵌套表单以不断添加新记录。您必须在数据库设计和结构中进行此更改。

于 2012-12-09T19:45:09.500 回答