2010-07-26 76 views
1

我有一张类似于以下的表格如何取消赋值?

id |名称|解决

两个姓名和地址不可为空(这我通过属性的制定者,而不是在默认情况下实现)

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

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

总之 - 我可以取消指定使用类似

my_object.name.delete 

从我的控制器,存储在一个记录的字段中的值?

感谢您

更新-模型二传手

def name=(value) 
    if name.nil? raise "Can't be nil" 
end 
+0

您可能需要插入模型的代码更清晰。 – 2010-07-26 14:48:31

+0

检查更新 – ZX12R 2010-07-26 14:51:23

+0

你想达到什么目的?如果你想要null/empty值,那么从setter中移除检查。实现这种验证的“Rails方式”是使用ActiveRecord验证器。这将允许创建和更新上的不同行为,我想这可能是您尝试解决问题的根源。 – 2010-07-26 17:06:36

回答

1

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

  1. 我会假设你正在使用ActiveRecord,你有一个模型,以治疗该表称为MyModel
  2. 我打算假设您使用正确的方法使字段不可为空,即使用验证。如果情况并非如此,我强烈建议您重新考虑使用它们。

然后,你可以这样做:

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 
+0

当分配my_object.name时,你可以给它一个nil吗?在数据库级别,NULL列与空字符串之间有区别,我想。 – 2010-07-26 15:46:40

+0

在db级别有,但validates_presence_of足够智能,不会被空字符串愚弄。如果您尝试在名称上放置任何“非空”值 - 如果我没有记错,则为空,空字符串或空数组。 – kikito 2010-07-26 17:23:39