Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何取消赋值?_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 如何取消赋值?

Ruby on rails 如何取消赋值?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我有一张类似下面的桌子 id |姓名|地址 名称和地址都不可为空(我仅通过属性设置器实现这一点,而不是默认设置) 当我创建一个没有任何默认值的新记录时,表中会存储什么 如果该值为空 ->如果我存储了一个值(比如name=“MyName”,address=“地址”)。如果需要,我可以在将其重置为空吗?我不能在这里赋值null,因为我的setter不允许 简言之,我可以使用以下方法取消分配存储在记录字段中的值吗 my_object.name.delete 从我的控制器那里 谢谢 更新模型设定器 你

我有一张类似下面的桌子

id |姓名|地址

名称和地址都不可为空(我仅通过属性设置器实现这一点,而不是默认设置)

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

如果该值为空
->如果我存储了一个值(比如name=“MyName”,address=“地址”)。如果需要,我可以在将其重置为空吗?我不能在这里赋值null,因为我的setter不允许

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

my_object.name.delete
从我的控制器那里

谢谢

更新模型设定器


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

  • 我假设您使用的是
    ActiveRecord
    ,您有一个名为
    MyModel
    的模型来处理该表
  • 我将假设您使用了使字段不可为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
    

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

  • 我假设您使用的是
    ActiveRecord
    ,您有一个名为
    MyModel
    的模型来处理该表
  • 我将假设您使用了使字段不可为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
    

    您可能希望插入模型代码以更清晰。您想实现什么?如果需要空/空值,则从setter中删除检查。实现这种验证的“Rails方法”是使用ActiveRecord验证器。这将允许在创建和更新时有不同的行为,我想这可能是您试图解决的问题的根源。您可能希望插入模型代码以便更清楚。您试图实现什么?如果需要空/空值,则从setter中删除检查。实现这种验证的“Rails方法”是使用ActiveRecord验证器。这将允许在创建和更新时有不同的行为,我想这可能是您试图解决的问题的根源。在分配my_object.name时,您能给它一个零吗?我认为,在DB级别,空列和带有空字符串的列之间是有区别的。在DB级别是有区别的,但是验证的存在是聪明的,不会被空字符串愚弄。如果您试图在名称上添加任何“非空”值,它将发出吠声—如果我没有记错的话,可以是nil、空字符串或空数组。分配我的_object.name时,您能给它一个nil吗?我认为,在DB级别,空列和带有空字符串的列之间是有区别的。在DB级别是有区别的,但是验证的存在是聪明的,不会被空字符串愚弄。如果您试图在名称上添加任何“非空”值,它将发出吠声—如果我没记错的话,可以是nil、空字符串或空数组。
    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