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.