Tôi có hai mô hình: Project
và ProjectDiscipline
:Rails 3: xác nhận sự hiện diện của ít nhất một có rất nhiều thông qua mục liên
class Project < ActiveRecord::Base
has_many :project_disciplinizations, :dependent => :destroy
has_many :project_disciplines, through: :project_disciplinizations
attr_accessible :project_discipline_ids
attr_accessible :project_disciplines_attributes
accepts_nested_attributes_for :project_disciplines, :reject_if => proc { |attributes| attributes['name'].blank? }
end
class ProjectDiscipline < ActiveRecord::Base
attr_accessible :name
has_many :project_disciplinizations, :dependent => :destroy
has_many :projects, through: :project_disciplinizations
end
class ProjectDisciplinization < ActiveRecord::Base
attr_accessible :project_discipline_id, :project_id
belongs_to :project_discipline
belongs_to :project
end
Về hình thức/chỉnh sửa Project
mới, tôi có một danh sách các môn học và một tấm séc hộp cho mỗi người trong số họ để người dùng có thể chọn kỷ luật:
<div class="control-group">
<label class="control-label">Check disciplines that apply</label>
<div class="controls">
<%= f.collection_check_boxes(:project_discipline_ids, ProjectDiscipline.order('name'), :id, :name, {}, {:class => 'checkbox'}) {|input| input.label(:class => 'checkbox') { input.check_box + input.text }} %>
<p class="help-block">You must choose at least one discipline.</p>
</div>
</div>
Tôi muốn thêm xác thực để yêu cầu ít nhất một môn học được chọn. Tôi đã thử nhưng tôi vẫn chưa tìm ra. Làm cách nào tôi có thể thêm xác thực này?
Bạn có thể xem lại câu trả lời của tôi không? – asiniy
Nếu bạn sau đó phá hủy kỷ luật, nó có thể xảy ra rằng một dự án không có kỷ luật nữa và do đó đang ở trạng thái không hợp lệ. – wacha
'.empty?' Sẽ phù hợp hơn ở đây, các truy vấn trống trả về bản ghi từ DB, trống rỗng 'SELECT 1 AS một FROM' project_disciplines 'WHERE AND' project_disciplines '.'id' = 1 LIMIT 1', hơi hiệu quả hơn. –