Pregunta

Tengo una Entry modelo y un Category modelo, donde una Entrada puede tener muchas Categorías (a través de EntryCategories):

class Entry < ActiveRecord::Base
  belongs_to :journal

  has_many :entry_categories
  has_many :categories, :through => :entry_categories
end

class Category < ActiveRecord::Base
  has_many :entry_categories, :dependent => :destroy
  has_many :entries, :through => :entry_categories
end

class EntryCategory < ActiveRecord::Base
  belongs_to :category
  belongs_to :entry
end

Al crear una nueva Entrada, creo yo llamando @journal.entries.build(entry_params), donde entry_params es que los parámetros del formulario de inscripción.Si cualquiera de las categorías seleccionadas, sin embargo, me sale este error:

ActiveRecord::HasManyThroughCantDissociateNewRecords in Admin/entriesController#create

Cannot dissociate new records through 'Entry#entry_categories' on '#'. Both records must have an id in order to delete the has_many :through record associating them.

Tenga en cuenta que el '#' en la segunda línea es literal;no salida de un objeto.

He tratado de nomenclatura mi categorías selectbox en el formulario para categories y category_ids pero tampoco hacer una diferencia;si bien es en la entry_params, para guardar fallará.Si no hay categorías seleccionadas, o puedo quitar categories de entry_params (@entry_attrs.delete(:category_ids)), guardar funciona correctamente, pero las categorías no guardar, obviamente.

A mí me parece que el problema es que una EntryCategory registro es intentar ser realizados antes de la Entrada del registro se guarda?No debería ser construir teniendo cuidado de que?

Actualización:

He aquí las partes pertinentes de esquema.rb, como se pide:

ActiveRecord::Schema.define(:version => 20090516204736) do

  create_table "categories", :force => true do |t|
    t.integer "journal_id",                                 :null => false
    t.string  "name",       :limit => 200,                  :null => false
    t.integer "parent_id"
    t.integer "lft"
    t.integer "rgt"
  end

  add_index "categories", ["journal_id", "parent_id", "name"], :name => "index_categories_on_journal_id_and_parent_id_and_name", :unique => true

  create_table "entries", :force => true do |t|
    t.integer  "journal_id",                                         :null => false
    t.string   "title",                                              :null => false
    t.string   "permaname",   :limit => 60,                          :null => false
    t.text     "raw_body",    :limit => 2147483647
    t.datetime "created_at",                                         :null => false
    t.datetime "posted_at"
    t.datetime "updated_at",                                         :null => false
  end

  create_table "entry_categories", :force => true do |t|
    t.integer "entry_id",    :null => false
    t.integer "category_id", :null => false
  end

  add_index "entry_categories", ["entry_id", "category_id"], :name => "index_entry_categories_on_entry_id_and_category_id", :unique => true

end

También, el ahorro de una entrada con las categorías que funciona bien en la acción de actualización (llamando @entry.attributes = entry_params), así que me parece que el problema se basa sólo en la Entrada no existente en el punto en el que la EntryCategory registros se pretende crear.

¿Fue útil?

Solución

Localicé a la causa de este error para estar dentro del nested_has_many_through plugin. Parece que la versión que había instalado era con errores; después de actualizar a la versión más reciente, mi construcción funciona de nuevo.

Otros consejos

¿Por qué llamas

self.journal.build(entry_params)

en lugar de

Entry.new(entry_params)

Si es necesario crear una nueva entrada asociado a una específica Diario, dado un @revista, puede hacerlo

@yournal.entries.build(entry_params)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top