Settare gli extra attributes di un jonio model, parte seconda :-)

Salve, perdonate l’insistenza ma proprio non riesco a gestire gli
attributi extra dei join model di una has_many :through.
Forse sbaglio la logica non so…
I modelli sono:

class Company < ActiveRecord::Base
has_many :managements
has_many :managers, :through => :managements

class Manager < ActiveRecord::Base
has_many :managements
has_many :companies, :through => :managements

class Management < ActiveRecord::Base
belongs_to :company
belongs_to :manager

ROLES = [“Rappresentante legale”, “Titolare”].freeze

Management ha un extra attributo :role i cui valori sono da prendere
dall’array ROLES.

Quello che voglio fare e’:
creare una Company;
una volta creata aggiungerle un Manager ma al contempo, alla creazione
del nuovo Manager, valorizzare l’attributo :role di Management.
Il form per la creazione di una Company e’ semplice e non comporta
problemi.
Una volta creata la company chiamo il form per la creazione di un
Manager:

  • args = @company.nil? ? [@manager] : [[@company, @manager], {:remote =>
    true}]
    = semantic_form_for *args do |f|

    = f.inputs :name, :surname, :fiscal_code, :city, :zip_code,
    :address, :street_number, :tel, :email
    = f.semantic_fields_for :managements do |management|
    = management.inputs do
    = management.input :role, :as => :select, :collection =>
    Management::ROLES

    = f.buttons :commit

Se @company e’ nil uso il form per fare modifiche gestendo
singolarmente il Manager, altrimenti uso il form per creare un nuovo
Manager da associare a @company.
Cosi’ com’e’ non vedo il campo :role di Management.
Il manager controller e’:

def new
@company = Company.find(params[:company_id])
@manager = @company.managers.build

def create
@company = Company.find(params[:company_id])
@manager = Manager.new(params[:manager])
@manager.company_ids = @company.id

Funziona, nel senso che il Manager viene creato ed associato a @company.
Non trovo pero’ il modo di valorizzare contemporaneamente l’attributo
:role di Management.

On 12 January 2012 12:06, Mauro [email protected] wrote:

has_many :managements

= f.inputs :name, :surname, :fiscal_code, :city, :zip_code,
Cosi’ com’e’ non vedo il campo :role di Management.
@manager.company_ids = @company.id

Funziona, nel senso che il Manager viene creato ed associato a @company.
Non trovo pero’ il modo di valorizzare contemporaneamente l’attributo
:role di Management.

Possibile che nessuno si sia mai scontrato con un problema simile?
Leggo su internet vari post di persone che cercano soluzioni simili
senza trovarne, e’ davvero impossibile?

A titolo informativo, dopo giorni e giorni di prove, ho risolto.
Semplicemente nel controller anziche’ fare il build di manager andava
fatto quello di management:

def new
@company = Company.find(params[:company_id])
@manager = Manager.new
@manager.managements.build
new!
end

def create
@company = Company.find(params[:company_id])
@manager = Manager.new(params[:manager])
@manager.managements.build(:role => params[:role], :company =>
@company)
create!
end
.