我没有在网上找到任何好的例子,所以我想问一个简单的问题,我希望得到一个简单的答案。要温柔。 :)
我有一个Post模型。
p = Post.find(1)
p.title = "This is the Title of this Article"
p.url_title = "this-is-the-title-of-this-article--created-by-user-name"
创建帖子后,我根据标题创建:url_title。这就是我在数据库中关闭它的方式,而不是暴露同样无聊且无描述性的ID。
我在before_save中构建了这个:url_title,这就是为什么我不能简单地使用'validates_uniqueness_of',因为看起来验证是在before_save启动之前完成的,并且有一个:url_title来验证。
所以,我需要确保:url_title是唯一的。我附加了“--created-by - #{p.user.name}”,以允许不同用户对同一标题进行多次使用。
因此,我需要做的是进行自定义验证,确认:url_title在保存之前对数据库是唯一的,如果它不是唯一的,则会引发错误并通知用户。
关于最佳方法的想法? “
答案 0 :(得分:2)
您可以将回调从before_save
移至before_validation
(请参阅here)。此回调将在创建和更新操作上运行,因此我认为它足以满足您的需求。
答案 1 :(得分:1)
使用它来创建url_title
before_validation_on_create :create_url_title
....
private
def create_url_title
url_title = .....
end
然后将适当的验证添加到url_title
validate_uniqueness_of :url_title, :message => "This title is taken, please choose a different title"
答案 2 :(得分:0)
添加
validates_uniqueness_of :url_title
在你的帖子模型中