ho due modelli: Project
e ProjectDiscipline
:Rails 3: convalidare presenza di almeno uno ha molti attraverso voce associazione
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
Sul nuovo modulo/modificare Project
, ho una lista di discipline e un assegno scatola per ognuno di loro, così gli utenti possono scegliere le discipline:
<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>
voglio aggiungere una convalida di esigere che almeno una disciplina sia selezionata. Ho provato ma non ho ancora capito. Come posso aggiungere questa convalida?
Puoi rivedere la mia risposta? – asiniy
Se si distrugge la disciplina, potrebbe accadere che un progetto non abbia più discipline e quindi sia in uno stato non valido. – wacha
'.empty?' Sarebbe più appropriato qui, query vuote restituiscono il record dal DB, vuoto fa 'SELECT 1 AS uno FROM' project_disciplines 'WHERE AND' project_disciplines' .'id' = 1 LIMIT 1', che è leggermente più efficiente. –