Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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 活动记录接受嵌套属性-创建具有重写类名称的记录_Ruby On Rails_Activerecord_Nested Attributes - Fatal编程技术网

Ruby on rails 活动记录接受嵌套属性-创建具有重写类名称的记录

Ruby on rails 活动记录接受嵌套属性-创建具有重写类名称的记录,ruby-on-rails,activerecord,nested-attributes,Ruby On Rails,Activerecord,Nested Attributes,当我保存表单(这里显示的最后一段代码)时,我会收到一个错误消息:unknown attribute:person 我认为这是因为我重写了administrator属性的类名 有什么想法吗 class Event < ActiveRecord::Base #start_date, end_date, title has_one :administrator, :class_name => "Person" has_one :account_manager, :class_

当我保存表单(这里显示的最后一段代码)时,我会收到一个错误消息:unknown attribute:person

我认为这是因为我重写了administrator属性的类名

有什么想法吗

class Event < ActiveRecord::Base
  #start_date, end_date, title
  has_one :administrator, :class_name => "Person" 
  has_one :account_manager, :class_name => "Person"
  accepts_nested_attributes_for :administrator
end

class Person < ActiveRecord::Base
  #fname, lname, bday
  belongs_to :event
end
事件控制器#创建

看法



我还注意到,该字段的名称为event[person][lname],这将是一个问题,因为event需要接受account\u manager的嵌套属性

<%= form_for @event do |f| %>
  <%= f.text_field.title %>
  <%= f.fields_for @event.administrator, :administrator_attributes do |administrator| %>
    <%= administrator.text_field :lname %>
  <% end %>
  <%= f.submit "Save" %>
<% end %>

不太合适的方式,但效果良好:

class EventsController < ApplicationController

  before_filter :fix_administrator_attribs, :only => [:create, :update]

  # ...

  protected

  def fix_administrator_attribs 
    if params[:event][administrator]
      administrator = params[:event][:administrator]
      params[:event].delete(:administrator)
      params[:event].update({:administrator_attributes => administrator})
    end
  end

end
类事件控制器[:create,:update]
# ...
受保护的
def修复\u管理员\u属性
如果参数[:事件][管理员]
管理员=参数[:事件][:管理员]
参数[:事件]。删除(:管理员)
参数[:event].update({:administrator\u attributes=>administrator})
结束
结束
结束

我的参数散列中没有管理员。它在表单上显示为事件[个人][名称]啊!你第一次是对的。但是,符号应该出现在字段u中的对象之前。这种方式似乎对我不起作用。字段:administrator、@event.administrator do。。。。或字段\u:管理员执行。。他们都很出色,你帮我找到了解决办法。添加对我有效的部分,我将标记它。谢谢你的帮助!!没问题。在我的回答中包含了旧的解决方案。
<%= form_for @event do |f| %>
<%= f.text_field.title %>
<%= f.fields_for :administrator do |administrator| %>
<%= administrator.text_field :lname %>
<% end %>
<%= f.submit "Save" %>
<% end %>
<%= form_for @event do |f| %>
  <%= f.text_field.title %>
  <%= f.fields_for @event.administrator, :administrator_attributes do |administrator| %>
    <%= administrator.text_field :lname %>
  <% end %>
  <%= f.submit "Save" %>
<% end %>
class EventsController < ApplicationController

  before_filter :fix_administrator_attribs, :only => [:create, :update]

  # ...

  protected

  def fix_administrator_attribs 
    if params[:event][administrator]
      administrator = params[:event][:administrator]
      params[:event].delete(:administrator)
      params[:event].update({:administrator_attributes => administrator})
    end
  end

end