2010-07-26 58 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