2013-05-02 25 views
5

Buduję aplikację, która musi przypisać zadanie do wielu pracodawców.Szyny 4: pola wyboru z has_many przez

mam budować te modele:

#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 

A teraz chcę formularz, aby zapisać się do tabeli employer_assignment ale następujący kod użyłem do mojej postaci nie działa.

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

zrobiłem dodać: employer_ids do mojego kontrolera przypisania z którego próbuję wysłać formularz, który nie tworzy przypisanie ale nie tworzy rekordy w tabeli employer_assignment. Po dodaniu ich za pomocą konsoli (Assignment.last.employers < < Employer.all ) wszystko działa poprawnie. Jestem pewien, że czegoś mi brakuje, ale nie wiem, co.

Z góry dziękuję.

+0

Czy znalazłeś rozwiązanie tego problemu? Mam podobny problem. Nie zapisuje do DB – Benjamin

+1

Railsy IIRC 4 używają domyślnie silnych parametrów, które nie obsługują typów tablic. Musisz więc jednoznacznie zdefiniować, że 'employer_ids' powinno być tablicą, aby była dozwolona przez. –

Odpowiedz

9

Prawdopodobnie dostajesz Unpermitted parameters: w dzienniku z powodu Silnych parametrów w rails4 (@ emil-kampp wspomniał o tym), po wygenerowaniu świeżych szyn, są one generowane w kontrolerze. Więc za pomocą kodu to wyglądać mniej więcej tak:

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

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

zobaczyć także ten Question na SO, która odpowiada na to. Mam nadzieję, że to uratuje kogoś kilka cykli.

Powiązane problemy