代码之家  ›  专栏  ›  技术社区  ›  ZX12R

如何取消赋值?

  •  1
  • ZX12R  · 技术社区  · 14 年前

    我有一张类似下面的桌子

    身份证|姓名|地址

    姓名和地址 不可为null(这仅通过属性设置器实现,默认情况下不是)

    当我创建一个没有任何默认值的新记录时,表中会存储什么?

    如果值为空

    简言之- 我可以使用以下方法取消分配存储在记录字段中的值吗

    my_object.name.delete
    

    从我的控制器?

    def name=(value)
      if name.nil? raise "Can't be nil" 
    end
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   kikito    14 年前

    你可以。但首先,我的假设是:

    1. 我假设你正在使用 ActiveRecord 你有一个模型叫做 MyModel 为了治疗那张桌子。
    2. 我将假设您使用了使字段不可为null的正确方法,即使用验证。如果不是这样,我强烈建议你重新考虑使用它们。

    然后你可以做:

    class MyModel < ActiveRecord::Base
      validates_pressence_of :name, :if => :check_name
    
      attr_writer :check_name
      def check_name # make it defalt to true
        @check_name = @check_name.nil? ? true : @check_name
      end
    end
    

    你可以这样使用它:

    my_object.name = "Josh"
    my_object.save # ok
    my_object.name = ""
    my_object.save # not ok
    my_object.check_name = false
    my_object.save # ok