Первая среда:
Rails 2.1.0, Ruby 1.8.7, Mysql 5.1.54, Ubuntu 11.04
В моей таблице есть логическое поле, которое начинается с NULL, но я не могу найти хороший способ установить на NULL. (Это поле в основном является полем да / нет / без ответа, для которого true / false / null кажется подходящим. Клиент определенно сказал, что хотел бы, чтобы оно оставалось пустым (без ответа).)
Вот моя миграция (конкретные имена заменены):
class AddQuestionToClients < ActiveRecord::Migration
def self.up
add_column :clients, :question, :boolean
end
def self.down
remove_column :clients, :question
end
end
Мой контроллер использует базовый
@client = Client.find(params[:id])
@client.update_attributes(params[:client])
В моем представлении есть селектор (я думаю, что это вызывает проблему, он никогда не был великолепен с выборами помощника формы):
<%= f.select :question, [["Yes", true], ["No", false]], { :include_blank => true, :selected => @client.question } %>
При выборе да, true передается; нет, ложь пройдена; пусто, "" передается.
Но, похоже, "" автоматически обновляется до false при обновлении базы данных.
Чтобы обойти это, я делаю это:
params[:client][:question] = (params[:client][:question] == "")? nil : params[:client][:question]
Но это не может быть правильным способом сделать это. Чего мне не хватает?