使用嵌套表单从belongs_to关联中插入多个项目

时间:2012-03-22 13:10:48

标签: ruby-on-rails ruby-on-rails-3

以我的Rails方式,我刚刚向社区发现了另一个问题。

我有以下项目:我有一个日历,它可以呈现任何客户与我公司合作的事件。如果我想只用一个客户端插入一个新事件,我没有问题,但如果我想插入一个有多个客户端的新事件,我就有问题。

但是同时插入多个客户端是不可能的。我知道使用这种配置,Rails只接受每个事件实例的一个客户端,一个解决方案可以改变Event和Client之间的关联模型,但对我来说没有意义(事件has_many客户端和客户端belongs_to事件...听起来怪怪的)。所以,这篇文章与社区的编译选项有关。

这是我的代码(我使用的是Ryan Bates [github.com/ryanb/nested_form.git]的nested_form gem):

更新:到目前为止,我以这种方式介绍了一个新的模型组:

模型/ group.rb

class Group < ActiveRecord::Base
  has_many :clients
  has_many :events

  accepts_nested_attributes_for :clients
  accepts_nested_attributes_for :events

  attr_accessible :events_attributes, :clients_attributes
end

模型/ client.rb

class Client < ActiveRecord::Base
  has_many :events
  belongs_to :group

  accepts_nested_attributes_for :events
  accepts_nested_attributes_for :group, :update_only => true

  attr_accessible :name, :surname, :email, :group_attributes, :events_attributes
end

模型/ event.rb

class Event < ActiveRecord::Base
  belongs_to :group

  accepts_nested_attributes_for :group, :update_only => true

  attr_accessible :title, :group_id, :starts_at, :ends_at, :group_attributes
end

视图/活动/ _form.html.erb

<%= simple_nested_form_for @event do |f| %>
  <%= f.input :title %>
  <%= f.fields_for :group do |group_form| %>
    <%= group_form.fields_for :clients do |client_form| %>
      <%= client_form.input :name %>
      <%= client_form.input :surname %>
      <%= client_form.input :email, :as => :email %>
      <%= client_form.link_to_remove "Remove this client" %>
    <% end %>
<%= group_form.link_to_add "Add another client", :clients %>
  <% end %>
  <%= f.input :starts_at, :as => :datetime %>
  <%= f.input :ends_at, :as => :datetime %>
  <%= f.button :submit %>
<% end %>

但是知道,我的问题是,当我为一个组创建一个事件时,当我只插入一个客户端时,该组成功创建。当我尝试插入两个或更多客户端时,我得到了下一个:

ActiveModel::MassAssignmentSecurity::Error (Can't mass-assign protected attributes: new_1332430522879):
  app/controllers/events_controller.rb:44:in `new'
  app/controllers/events_controller.rb:44:in `create'

啊!我之前忘记发表评论(但我认为这与此无关),我正在使用Ruby 1.9.3-p125和Rails 3.2.2

有什么想法吗?

提前致谢...

Foncho

0 个答案:

没有答案