Rails - 关联时调用自定义验证

时间:2015-12-09 18:46:10

标签: ruby-on-rails

我在rails中进行自定义验证时遇到问题。

我有一个非常简单的has_many_through关联:

class Event
  has_many :event_tags
  has_many :tags, through: :event_tags
end

class Tag
  has_many :event_tags
  has_many :events, through: :event_tags
end

class EventTag
  belongs_to :event
  belongs_to :tag
end

我对我的Tag模型进行了验证,这只是一个唯一性,但只是使用一个范围稍微复杂一点。因此,我的模型中有:

validate :name_is_unique_in_scope
...
def name_is_unique_in_scope
  errors.add(:base, 'not unique') if not_unique #this is simplified
end

当我创建新标签时,这非常有效。

现在,当我创建一个新事件时,我的简单表单中有一个关联字段:

<%= f.association :tags, collection: @tags, label_method: :name, value_method: :id, label: false, required: true, include_hidden: false, input_html: { class: 'form-control', id: 'form-event-tags', multiple: 'multiple' }%>

并在我的控制器的创建动作中:

@event.tag_ids = params[:event][:tag_ids]

也曾经非常好用。

现在的问题是,由于我已经进行了自定义验证,因此正在调用Tag模型的自定义验证,并且无法创建我的关联。我的EventTag模型没有验证,所以我真的不明白为什么要调用它而我没有创建一个新的Tag对象。

如果我将此验证更改为标准

validates :name, presence: true, uniqueness: true

这又有效了。

由于

0 个答案:

没有答案