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

**URL:** <https://www.ruby-forum.com/t/settare-gli-extra-attributes-di-un-jonio-model-parte-seconda/215671>\
**Category:** IT\
**Created:** [January 12, 2012, 12:06pm UTC](https://www.ruby-forum.com/t/settare-gli-extra-attributes-di-un-jonio-model-parte-seconda/215671 "2012-01-12T12:06:59Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![luislavena](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/0ea827/32.png) [@luislavena](https://www.ruby-forum.com/u/luislavena)\
**Post date:** [January 12, 2012, 12:06pm UTC](https://www.ruby-forum.com/t/settare-gli-extra-attributes-di-un-jonio-model-parte-seconda/215671/1 "2012-01-12T12:06:59Z")

</div>

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|

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.

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [January 15, 2012, 7:43pm UTC](https://www.ruby-forum.com/t/settare-gli-extra-attributes-di-un-jonio-model-parte-seconda/215671/2 "2012-01-15T19:43:30Z")

</div>

On 12 January 2012 12:06, Mauro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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?

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [January 15, 2012, 11:50pm UTC](https://www.ruby-forum.com/t/settare-gli-extra-attributes-di-un-jonio-model-parte-seconda/215671/3 "2012-01-15T23:50:25Z")

</div>

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  
.
