以我的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