私のTag
モデルには、属性の検証がいくつかありますname
。他のすべてのケースでは問題なく動作しています。しかし、私find_or_create_by_name
がこの方法で呼び出すと:
# 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