有2个型号:
class User < ActiveRecord::Base
has_many :posts
end
和
class Post < ActiveRecord::Base
belongs_to :user
end
Posts表有一列:u_hash。这应该是随机生成的标识哈希(供公众查看)。生成此哈希的最佳方法是什么?如何将其添加到表中?我们的想法是,所有这些都将在后台发生,并且对用户不可见(表单中没有隐藏字段)。使用的数据库是MySQL,如果这可以帮助我以某种方式。
提前致谢! Ĵ
答案 0 :(得分:4)
您before_validation_on_create
模型最有可能需要Post
回调。当您将新的ActiveRecord
记录保存到数据库中时,此回调在内部由Post
功能调用。
您可以找到一个好的回调参考和订单回调的提示here。
以下是一段代码,解释了您需要使用before_validation_on_create
的原因:
class Post < ActiveRecord::Base
belongs_to :user
validates_uniqueness_of :u_hash
before_validation_on_create :generate_u_hash
def generate_u_hash
begin
new_u_hash = "random hash here"
end while Post.find_by_u_hash(new_u_hash)
self.u_hash = new_u_hash
end
end
答案 1 :(得分:0)
这听起来像是ActiveRecord callbacks的工作。
如果你的帖子表有一个before_create回调,你可以在每次创建新的帖子实例时自动创建和设置一个值。
e.g:
class Post < ActiveRecord::Base
belongs_to :user
before_create :set_uhash_column
private
def set_uhash_column
#your code here - something like self.uhash = ...
end
end