Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ';Can';t大规模分配受保护的属性';使用嵌套表单实现多表继承时_Ruby On Rails_Ruby On Rails 3_Inheritance_Nested Forms_Multi Table Inheritance - Fatal编程技术网

Ruby on rails ';Can';t大规模分配受保护的属性';使用嵌套表单实现多表继承时

Ruby on rails ';Can';t大规模分配受保护的属性';使用嵌套表单实现多表继承时,ruby-on-rails,ruby-on-rails-3,inheritance,nested-forms,multi-table-inheritance,Ruby On Rails,Ruby On Rails 3,Inheritance,Nested Forms,Multi Table Inheritance,嗨,我正在尝试在我的应用程序中实现MTI。我有一个人模型和从中继承的两个模型:客户和团队成员。创建团队成员时,我希望将人员(姓名、电子邮件等)和团队成员(经验水平、团队类型,如果领导与否)的值保存到数据库中。我使用嵌套属性表单,因此在我的团队成员表单中,我嵌套了person字段。不幸的是,我在尝试保存时遇到了“无法批量分配受保护的属性:个人”错误。有人能告诉我怎么解决这个问题吗?谢谢 型号: 更新了TeamMember类,但仍然存在相同的错误 还尝试了人员属性和人员属性,但均无效 class T

嗨,我正在尝试在我的应用程序中实现MTI。我有一个人模型和从中继承的两个模型:客户和团队成员。创建团队成员时,我希望将人员(姓名、电子邮件等)和团队成员(经验水平、团队类型,如果领导与否)的值保存到数据库中。我使用嵌套属性表单,因此在我的团队成员表单中,我嵌套了person字段。不幸的是,我在尝试保存时遇到了“无法批量分配受保护的属性:个人”错误。有人能告诉我怎么解决这个问题吗?谢谢 型号:

更新了TeamMember类,但仍然存在相同的错误 还尝试了人员属性和人员属性,但均无效

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 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关联。

实际上,当我为:person添加行接受嵌套的属性并刷新页面时,person的字段完全消失。确定。它可能消失了,因为您传递的@team_member刚刚初始化,没有关联人员。是吗?是的,我确实是。调用新操作时,我初始化TeamMember对象。但是,当我尝试添加建议的行(@team_member.person.build)时,它返回'undefined method'build'for nil:NilClass'。为什么呢?顺便提一下,蒂亚戈-我真的很感谢你的帮助。对不起。我的错误。我编辑了答案。你应该尝试:@team\u member.build\u person,如果它是一个has\u one关联。build()是为很多人准备的。我通过如上所述更改我的create方法解决了这个问题。蒂亚戈-你是最棒的:)非常感谢你!
<%= 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>
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