Изглежда не мога да разбера защо 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.