我在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
这又有效了。
由于