2013-05-02 32 views
5

Tôi đang xây dựng một ứng dụng phải gán một nhiệm vụ cho nhiều nhà tuyển dụng.Rails 4: các hộp kiểm có has_many thông qua

Tôi đã xây dựng các mô hình:

#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 

Và bây giờ tôi muốn các hình thức để lưu vào bảng employer_assignment nhưng đoạn mã sau tôi sử dụng cho hình thức của tôi không hoạt động.

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

Tôi đã thêm: employ_ids vào bộ điều khiển chuyển nhượng mà từ đó tôi cố gắng gửi biểu mẫu tạo bài tập nhưng không tạo bản ghi trong bảng employ. Khi tôi thêm chúng thông qua bảng điều khiển (Assignment.last.employers < < Employer.all ) tất cả đều hoạt động tốt. Tôi chắc chắn tôi đang thiếu một cái gì đó nhưng không thể tìm ra những gì.

Xin cảm ơn trước.

+0

Bạn đã tìm thấy giải pháp cho điều này chưa. Tôi gặp một vấn đề tương tự. Không lưu vào DB – Benjamin

+1

IIRC ray 4 sử dụng thông số mạnh theo mặc định, không hỗ trợ các loại mảng. Vì vậy, bạn cần xác định rõ ràng rằng 'employ_ids' phải là một mảng, cho phép nó được cho phép thông qua. –

Trả lời

9

Có thể bạn đang nhận được Unpermitted parameters: trong nhật ký của mình do Tham số mạnh trong đường ray4 (@ emil-kampp đã đề cập), sau khi tạo đường ray mới, chúng được tạo trong bộ điều khiển của bạn. Vì vậy, sử dụng mã của bạn sẽ trông giống như sau:

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

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

Cũng thấy điều này Question trên SO trả lời câu hỏi này. Hy vọng rằng điều này giúp tiết kiệm một vài chu kỳ.