Создание новой сущности с полиморфным атрибутом - PullRequest
0 голосов
/ 02 января 2012

Я создаю систему тегов для трех разных типов объектов.У меня проблемы с реализацией его как ассоциированного, полиморфного атрибута.Кажется, что редактирование существующего контакта работает (оно создает связанную запись), но при создании нового контакта оно просто не создает другую запись.Существует только одна связанная запись, поскольку каждый тег записывается в одно длинное текстовое поле в виде одной строки.

contact.rb:

class Contact < ActiveRecord::Base
   has_one :tag, :as => taggable
   accepts_nested_attributes_for :tag, :allow_destroy => true, 
     :reject_if => :all_blank

tag.rb:

class Tag < ActiveRecord::Base
  belongs_to :taggable, :polymorphic => true

contacts_controller.rb:

def new
   @contact = Contact.new
   @contact.tag = Tag.new
end

def edit
  @contact = Contact.find(params[:id])
  if @contact.tag.nil?
    @contact.tag = Tag.new
  end
end

new.html.erb:

<%= fields_for :tag do |tag| %>
<div class="clearfix">
  <%= tag.label :tags, 'Tags' %>
  <div class="input">
    <%= tag.text_field :tags %>
  </div>
</div>

1 Ответ

1 голос
/ 03 января 2012

То, что происходит, заключается в том, что вы не сообщаете fields_for, для какого объекта он выполняет nested_attributes_for.

Префикс полей с именем вашего внешнего form_for объекта, и он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...