Защо mongoid не добавя моите вложени атрибути към new()?

Изглежда не мога да разбера защо Mongoid няма да зададе вложените атрибути за дъщерен обект, когато създавам нов родител. Искам да създам ново фолио, да добавя една дъщерна функция, след което да я избутам в масива фолио в профил.

Имам профил, който вгражда много фолио, които вграждат много функции:

class Profile
  include Mongoid::Document
  include Mongoid::Timestamps::Updated

  #regular fields here; removed for brevity

  embeds_many :folios, class_name: "Folio"
end

class Folio
  include Mongoid::Document
  include Mongoid::Timestamps::Updated

  accepts_nested_attributes_for :features
  embedded_in :profile

  field :name
  field :desc
  field :order, type: Integer, default:0
  embeds_many :features

  attr_accessible :name, :desc, :order  
end

class Feature
  include Mongoid::Document
  include Mongoid::Timestamps::Updated

  embedded_in :folio
  belongs_to :project

  field :content_type, type: Integer  #ContentType
  field :content_id
  field :txt, type: String
  field :order, type: Integer, default:0

  attr_accessible :project_id, :content_type, :content_id, :txt, :order
end

Контролер:

  def new
    @folio = Folio.new
    @folio.features.build
  end

  def create
    @folio = Folio.new(params[:folio])

    #@folio.features is still empty here.

    @profile.folios << @folio
    @profile.save
    render "create_or_update.js"
  end

В create параметърът хеш изглежда добре:

{"folio"=>{"id"=>"new", "name"=>"new name", "desc"=>"new description", "features_attributes"=>{"0"=>{"project_id"=>"4ea0b68e291ebb44a100000a", "content_type"=>"1", "content_id"=>"4ea0b68e291ebb44a100000d", "txt"=>"note here"}}}, "commit"=>"Save", "action"=>"create", "controller"=>"folios"}

Но @folio.features все още е празен.

Това работи добре с AR, ако си спомням. Странно, но във Folio няма метод features_attributes=(). Мислех, че това е необходимо, за да работят вложените атрибути? какво ми липсва

Това е на Rails 3.1 с Mongoid 2.2.3.


person ericvg    schedule 30.10.2011    source източник
comment
успяхте ли да направите това да работи?   -  person jtomasrl    schedule 21.01.2013


Отговори (1)


опитвали ли сте да активирате AutoSave true за функции във фолио документ

class Folio
  include Mongoid::Document
  include Mongoid::Timestamps::Updated

  accepts_nested_attributes_for :features , :autosave => true
  embedded_in :profile
end
person RameshVel    schedule 31.10.2011
comment
Работи. Според документите това не трябва да се изисква за вградени документи. Също така трябваше да добавя attr_accessible: features_attributes към Folio, за да заработи. - person ericvg; 31.10.2011