总是将新文本附加到列中的当前文本



我想要一个"注释";模型中的项,该项总是在新建/编辑时将表单中的任何新文本附加到任何当前存在的注释中。

我看到的是:

def update
ppe_params[:notes] = @ppe.notes + "/n" + ppe_params[:notes]
respond_to do |format|
if @ppe.update(ppe_params)
format.html { gflash :success => 'PPE was successfully updated.'; redirect_to @ppe }
else
format.html { render :edit }
end
end

结束

这似乎是一个简单的解决方案,那么陷阱是什么呢?我使用的是Postgres,不太担心在Postgres中使用TEXT列时空间不足。将其移动到模型中的一个方法是更好的形式吗?

有没有办法让Postgres总是将新的注释文本附加到当前列值?

就我个人而言,我一般不会使用这种方法。您可以在更新时使用触发器来简单地附加新值,而不是覆盖。这样做的问题是,如果不禁用或绕过触发器,就绝对无法清除该列,这将非常令人讨厌。

如果你必须拥有这个功能,我只会把它放在应用程序级别,而不是在数据库中实现它。如果你提出要求,我会编写DB代码,但这是一个糟糕的主意(从我的想法来看(,我不希望有人在不考虑后果的情况下实现该代码。

正如@muistosort所指出的,这确实值得成为它自己的表,表中有:comment:date:user_id,在适当的模型中有has_many/belongs_to。这就是我要走的路。感谢大家对现实的检查,有时我的头脑太多了,我忘记了好的DB设计。

相关内容

  • 没有找到相关文章

最新更新