Active Record принимает вложенные атрибуты для - создания записи с переопределенным именем класса - PullRequest
0 голосов
/ 29 сентября 2011

Когда я сохраняю форму (последний фрагмент кода показан здесь), я получаю сообщение об ошибке: неизвестный атрибут: person

Я думаю, это потому, что я переопределил имя класса атрибута администратора.

Есть идеи?

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_controller # новый

@event = Event.new
@event.build_administrator

event_controller # создать

@event = Event.new(params[:event])
#=> unknown attribute: person

вид

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

Я также заметил, что поле генерируется с именем event [person] [lname] , что будет проблемой, так как событие должно будет принять вложенные атрибуты для account_manager

1 Ответ

1 голос
/ 29 сентября 2011

Редактировать : столкнулся с этим, и я думаю, что это более правильный способ сделать это.

<%= 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
...