基于数据库中现有值的Ruby ActiveRecord验证

时间:2013-09-18 10:52:55

标签: ruby-on-rails ruby

我知道Ruby中常见的验证方法。 我目前的问题是,如果记录存在boolean设置为true,我希望插入失败。例 表中的列是=>姓名,地址,Has_changed,id

现在如果在表中将has_changed设置为true,我想在表中(在单独的调用中)添加新条目,该条目将具有名称,地址(新的),has_changed(设置为false)和id。我不想更新现有的条目,因为我想保留历史记录。

有没有办法通过使用Ruby进行这样的验证?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我认为最好在你的控制器中使用“新”和“创建”动作

class RecordsController < BaseController
  def new
    @record = Record.find(params[:id])
  end

  def create
    Record.create(params[:record])
  end
end

您的表单只包含地址

在你的模型中创建一个before_create hook

class Record < ActiveRecord::Base

  default_value_for :has_changed, false
  before_create :check_changed

  ...

  private

  def check_changed
    changed_record = Record.where(name: name, has_changed: false).first
    if changed_record && (changed_record.address != address)
      changed_record.has_changed = true
      changed_record.save
    end
  end
end

并添加地址验证以避免重复