草庐IT

ruby-on-rails - rails 3 : validate presence of at least one has many through association item

coder 2025-05-11 原文

我有两个模型:ProjectProjectDiscipline:

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

在新建/编辑 Project 表单上,我有一个学科列表和每个学科的复选框,以便用户可以选择学科:

<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>

我想添加一个验证来要求至少检查一个学科。我已经尝试过,但我还没有弄清楚。如何添加此验证?

最佳答案

答案前的旁注,根据您的模型结构,我会使用 has_and_belongs_to_many 而不是使用此显式链接模型,因为看起来链接模型不会增加任何有值(value)的东西。

不管怎样,答案都是一样的,那就是使用自定义验证。根据您是按原样处理事物还是简化为 has_and_belongs_to many,您会希望验证方式略有不同。

validate :has_project_disciplines

def has_project_disciplines
  errors.add(:base, 'must add at least one discipline') if self.project_disciplinizations.blank?
end

或与 has_and_belongs_to_many

validate :has_project_disciplines

def has_project_disciplines
  errors.add(:base, 'must add at least one discipline') if self.project_disciplines.blank?
end

关于ruby-on-rails - rails 3 : validate presence of at least one has many through association item,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17813084/

有关ruby-on-rails - rails 3 : validate presence of at least one has many through association item的更多相关文章

随机推荐