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