gpt4 book ai didi

ruby-on-rails - 如何验证 ActiveRecord 模型中的虚拟属性?

转载 作者:行者123 更新时间:2023-12-01 13:08:23 26 4
gpt4 key购买 nike

我正在使用虚拟属性将标签保存在表单中以逗号分隔的文本框中的 Entry 模型中(基于 Railscasts #167 ):

class Entry < ActiveRecord::Base
has_many :entry_tags
has_many :tags, :through => :entry_tags

after_save :update_tags
attr_writer :tag_names

def tag_names
tags.map(&:name).join(", ")
end

def update_tags
if @tag_names
self.tags = @tag_names.split(",").map do |name|
Tag.find_or_create_by_name(name.strip)
end
end
end
private :update_tags
end

我想对我的标签名称添加验证,但我不确定最好的方法是什么。我在 Tag 模型中定义了一个现有的验证方法:

class Tag < ActiveRecord::Base
has_many :entry_tags
has_many :entries, :through => :entry_tags

validates_uniqueness_of :name
validates_format_of :name, :with => /\A[a-z0-9_ -]*\Z/, :on => :create
end

但是,因为 update_tags 方法是在保存之后调用的,所以创建过程中的任何验证错误都将在条目已保存之后发生。

我正在考虑在条目模型中创建一个验证方法并在条目保存时调用它,但是:

  1. 如果这样做,我不确定进行验证的最佳方式是什么。我是在 Entry 中创建自己的验证,还是为每个名称创建一个 Tag 对象并检查 t.valid??我会以某种方式从 Tag 收集验证错误消息或生成它们吗?
  2. 我不确定这是否是进行此类验证的正确方法。

有什么建议吗?

最佳答案

如果您还没有排除它,我会考虑使用 validates_associated .

关于ruby-on-rails - 如何验证 ActiveRecord 模型中的虚拟属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1120306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com