使用嵌套形式实现多个表继承时,“无法批准受保护的属性”
题
嗨,我正在尝试在我的应用程序中实现MTI。我有一个人模型和2个模型继承了它:客户和团队管理。在创建团队成员时,我想保存到数据库Vallues的人(名字和姓氏,电子邮件等)和团队成员(体验级别,团队类型,如果领先或不行)。我在我的团队成员表格中使用嵌套属性表单,我嵌套了人员字段。不幸的是,我在尝试保存时获得“无法批判受保护的属性:人”错误。有谁可以告诉我如何解决这个问题?谢谢! 型号:
更新了Teammember类,但仍然是相同的错误 也尝试过people_attributes和persons_attributes,这些都不是这些工作
class TeamMember < ActiveRecord::Base
has_many :project_team_members
has_many :projects, through: :project_team_members
has_one :person, as: :profile, dependent: :destroy
accepts_nested_attributes_for :person
attr_accessible :person_attributes, :experience_level, :lead, :qualification, :team
end
class Person < ActiveRecord::Base
belongs_to :company
belongs_to :profile, polymorphic: true
attr_accessible :email, :first_name, :last_name, :phone_number, :profile_id, :profile_type
end
.
控制器如下:
class TeamMembersController < ApplicationController
def create
person = Person.create! { |p| p.profile = TeamMember.create!(params[:team_member]) }
redirect_to root_url
end
.
和视图:
<%= form_for(@team_member) do |f| %>
<%= f.fields_for :person do |ff| %>
<div>
<%= ff.label :first_name %>
<%= ff.text_field :first_name %>
</div>
<div>
<%= ff.label :last_name %>
<%= ff.text_field :last_name %>
</div>
<div>
<%= ff.label :phone_number %>
<%= ff.text_field :phone_number %>
</div>
<div>
<%= ff.label :email %>
<%= ff.text_field :email %>
</div>
<div>
<%= ff.label :company_id %>
<%= ff.text_field :company_id %>
</div>
<% end %>
<div class="field">
<%= f.label :team %><br />
<%= f.text_field :team %>
</div>
<div class="field">
<%= f.label :experience_level %><br />
<%= f.text_field :experience_level %>
</div>
<div class="field">
<%= f.label :qualification %><br />
<%= f.text_field :qualification %>
</div>
<div class="field">
<%= f.label :lead %><br />
<%= f.check_box :lead %>
</div>
<div class="actions">
<%= f.submit %>
</div>
.
更新的TeammembersController(通过Tiago的礼貌,解决方案)
def new
@team_member = TeamMember.new
@team_member.build_person
respond_to do |format|
format.html # new.html.erb
format.json { render json: @team_member }
end
end
def create
@team_member = TeamMember.create!(params[:team_member])
redirect_to root_url
end
. 解决方案
以嵌套形式的质量分配属性,您需要指定:
class TeamMember < ActiveRecord::Base
has_many :project_team_members
has_many :projects, through: :project_team_members
has_one :person, as: :profile, dependent: :destroy
:experience_level, :lead, :qualification, :team #what is this line doing??
accepts_nested_attributes_for :person
attr_accessible :person_attributes
end
.
编辑:
在您需要构建人的表单之前调用的动作中。喜欢:
@team_member = TeamMember.new
@team_member.build_person
.
然后你将有一个与@team_member关联的人(不持久)。
不隶属于 StackOverflow