在将模型保存到数据库之前尝试对模型中的数据进行切片,但它不起作用
Trying to .slice data in the model before it is saved to the db but it isn't working
如果 key_type
是 4
,我试图让 slug 长度小于 20。
在我的模型中
validate :text_slug_length
def text_slug_length
if key_type == 4
slug.slice(0, 19)
end
end
但这不会引发任何错误,但也不起作用。不知道为什么...
slug 不用于 key_type
为 4
的值。 key_type
或 4
的数据可以是长文本块,因此在尝试保存非常长的 slug 时会导致长度错误。我无法以某种方式保存 key_type
4
的 slug,但这种方式也将阻止生成长 slug 的错误,我认为 .slice
会更容易。
谁能帮忙解释为什么这不起作用。
您没有分配切片值。
validate :text_slug_length
def text_slug_length
if key_type == 4
self.slug = slug.slice(0, 19)
end
end
您可能需要先检查 slug
的非零值。
现在这看起来不像是验证(它不会将属性标记为错误,而是会更正它们)但会修改用户输入。 D 建议您改用 before_validation
(并可能添加一个真正的验证,尽管这不是必需的,因为您确保不超过 slug 长度)。
before_validation :slice_slug
validates :slug, length: {maximum: 20}, if: :validate_slug_length?
def slice_slug
self.slug = slug.slice(0, 19) if slug.present? && validate_slug_length?
end
def validate_slug_length?
key_type == 4
end
如果数据不好,验证通常会给模型添加错误。看起来这不是你想要的;如果模型的 key_type == 4
,您只想截断 slug,对吗?怎么样:
before_validation :truncate_slug
def truncate_slug
self.slug = slug.try!(:slice, 0, 19) if key_type == 4
end
如果 key_type
是 4
,我试图让 slug 长度小于 20。
在我的模型中
validate :text_slug_length
def text_slug_length
if key_type == 4
slug.slice(0, 19)
end
end
但这不会引发任何错误,但也不起作用。不知道为什么...
slug 不用于 key_type
为 4
的值。 key_type
或 4
的数据可以是长文本块,因此在尝试保存非常长的 slug 时会导致长度错误。我无法以某种方式保存 key_type
4
的 slug,但这种方式也将阻止生成长 slug 的错误,我认为 .slice
会更容易。
谁能帮忙解释为什么这不起作用。
您没有分配切片值。
validate :text_slug_length
def text_slug_length
if key_type == 4
self.slug = slug.slice(0, 19)
end
end
您可能需要先检查 slug
的非零值。
现在这看起来不像是验证(它不会将属性标记为错误,而是会更正它们)但会修改用户输入。 D 建议您改用 before_validation
(并可能添加一个真正的验证,尽管这不是必需的,因为您确保不超过 slug 长度)。
before_validation :slice_slug
validates :slug, length: {maximum: 20}, if: :validate_slug_length?
def slice_slug
self.slug = slug.slice(0, 19) if slug.present? && validate_slug_length?
end
def validate_slug_length?
key_type == 4
end
如果数据不好,验证通常会给模型添加错误。看起来这不是你想要的;如果模型的 key_type == 4
,您只想截断 slug,对吗?怎么样:
before_validation :truncate_slug
def truncate_slug
self.slug = slug.try!(:slice, 0, 19) if key_type == 4
end