我的Tag
模型對屬性name
有一些驗證。在其他所有情況下都很好。但是當我通過這種方式撥打find_or_create_by_name
:`find_or_create_by`方法正在跳過模型驗證。爲什麼?
# The last value of this string (by coma) is empty.
# So this record should not be saved.
tags_line = 'ruby, javascript, '
tags_line.split(',').each do |tag_name|
tag = Tag.find_or_create_by_name(tag_name.strip) do |new_tag|
new_tag.update_attribute :user_id, member.user.id
end
# Just append tag to this model
# through `has_and_belongs_to_many :tags`
tags << tag if tag
end
但是這個空標籤甚至被保存。那麼,在這段代碼中可能會出錯?
注:當我刪除塊,它的工作原理:
...
tags_line.split(',').each do |tag_name|
# This way, invalid tag will not be created.
tag = Tag.find_or_create_by_name(tag_name.strip)
tags << tag if tag
end
它可以爲空值工作,但我想驗證格式,長度等。所以我尋找這個問題的根源,避免重複的驗證。 Tks – 2012-04-19 16:29:34
你說得對,對不起。誤解了你的問題。我在那裏添加了更多信息 – Christian 2012-04-19 16:40:28