2013-05-02 13 views
5

Sto costruendo un'applicazione che deve assegnare un compito a più datori di lavoro.Rails 4: caselle di controllo con has_many attraverso

devo costruire questi modelli:

#assignment.rb 
class Assignment < ActiveRecord::Base 
    has_many :employer_assignments 
    has_many :employers, :through => :employer_assignments 
end 

#employer.rb 
class Employer < ActiveRecord::Base 
    has_many :employer_assignments 
    has_many :assignments, :through => :employer_assignments 
end 

#employer_assignment.rb 
class EmployerAssignment < ActiveRecord::Base 
    belongs_to :employer 
    belongs_to :assignment 
end 

e ora voglio il modulo per salvare la tabella employer_assignment ma il seguente codice che ho usato per il mio modulo non funziona.

<div class="field"> 
    <%= f.label :employer_ids %><br /> 
    <%= collection_check_boxes(:assignment, :employer_ids, Employer.all, :id, :name) %> 
</div> 

ho fatto aggiungere: employer_ids al mio controller incarico da cui cerco di inviare il modulo che fa creare l'incarico, ma non crea il record nella tabella employer_assignment. Quando li aggiungo tramite la console (Assignment.last.employers < < Employer.all ) tutto funziona correttamente. Sono sicuro che mi manca qualcosa ma non riesco a capire cosa.

Grazie in anticipo.

+0

Hai trovato una soluzione a questo. Sto avendo un problema simile. Non salva nel DB – Benjamin

+1

I binari IIRC utilizza per impostazione predefinita parametri forti, che non supportano i tipi di array. Quindi è necessario definire esplicitamente che 'employer_ids' dovrebbe essere una matrice, affinché sia ​​consentita attraverso. –

risposta

9

Probabilmente stai ottenendo un Unpermitted parameters: nel tuo log a causa di Strong Parameters in rails4 (@ emil-kampp ha menzionato questo), dopo che un nuovo rail genera, sono generati nel tuo controller. Quindi, utilizzando il codice sarebbe simile a:

class EmployersController < ApplicationController 
    # <snip> 
    def update 
    @employer.update(employer_params) 
    end 

    def employer_params 
    params.require(:employer).permit(:name, { :employer_ids => [] }) 
    end 
end 

Vedi anche Question su SO che risponde presente. Spero che questo salvi qualcuno a pochi cicli.

Problemi correlati