2010-07-26 3 views
1

У меня есть таблица, аналогичная следующейКак отменить назначение значения?

ID | имя | адрес

как имени и адрес не обнуляемые (это я достичь с помощью атрибутов сеттеров только и не по умолчанию)

Когда я создать новую запись без какого-либо значений по умолчанию, что будет храниться в таблице?

Если значение равно
-> если я храню значение (например, name = "MyName", address = "Address"). могу ли я вернуть его обратно до нулевого значения, если необходимо? Я не могу присвоить значение null здесь, так как мой сеттер не разрешит.

Короче - я могу отменить назначение значение, хранящееся в поле пластинки, используя что-то вроде

my_object.name.delete 

от моего контроллера?

Спасибо Вам

Update-модель сеттер

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

Вы можете вставить код модели, чтобы быть более четким. –

+0

проверить обновление – ZX12R

+0

Что вы пытаетесь достичь? Если вам нужны нулевые/пустые значения, удалите чек из сеттера. «Rails Way» для реализации такого рода валидации заключается в использовании валидатора ActiveRecord. Это позволило бы по-разному повлиять на создание и обновление, которые, я думаю, могут быть причиной проблемы, которую вы пытаетесь решить. –

ответ

1

Вы можете. Но во-первых, мои предположения:

  1. Я буду считать, что вы используете ActiveRecord и у вас есть модель под названием MyModel для лечения этой таблицы.
  2. Я предполагаю, что вы использовали правильный способ сделать поля не-nullable, которые используются с помощью валидаций. Если это не так, я настоятельно рекомендую вам пересмотреть их использование.

Тогда вы можете сделать:

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 вы можете дать ему нуль? Я думаю, на уровне БД есть разница между столбцом NULL и столбцом с пустой строкой. –

+0

На уровне db есть, но validates_presence_of достаточно интеллектуальный, чтобы его не обманули пустой строкой. Это будет лаять, если вы попытаетесь поместить любое «непустое» значение в имя - нуль, пустую строку или пустой массив, если я правильно помню. – kikito

Смежные вопросы