2013-03-04 3 views
0

Я следовал за этим mini-tutorial successfully, чтобы столбец (car_code) в моей таблице (машинах) работал как последовательность (используя базу данных postgreSQL).Последовательность столбцов Rails на модели

В результате я эту таблицу:

CREATE TABLE Cars 
(
id serial NOT NULL, 
created_at timestamp without time zone NOT NULL, 
updated_at timestamp without time zone NOT NULL, 
car_date timestamp without time zone, 
car_code integer DEFAULT nextval('car_code_sequence'::regclass), 
CONSTRAINT cars_pkey PRIMARY KEY (id) 
) 

Моя вставка оператор работает нормально:

INSERT INTO cars(created_at, updated_at, car_date) VALUES (now(), now(), now()); 
--1|Date|Date|Date|2 <--using my car_code_sequence 

К сожалению, когда я вызвать «создать» операцию в «car_controller приложение рельсы генерировать этот заявление:

INSERT INTO "cars" ("created_at", "car_code", "car_date", "updated_at") 
VALUES ($1, $2, $3, $4) RETURNING "id" [ 
    ["created_at", Mon, 04 Mar 2013 14:39:55 UTC +00:00], 
    ["car_code", nil], 
    ["car_date", Mon, 04 Mar 2013 14:39:55 UTC +00:00], 
    ["updated_at", Mon, 04 Mar 2013 14:39:55 UTC +00:00]] 

Итак, мой вопрос:

Кто может изменить модель автомобиля, чтобы исключить столбец «car_code» из инструкции insert (но сохранить «car_code» в базе данных), то есть иметь такое же поведение, что и «id»).

ответ

1

Попробуйте добавить этот код в модели автомобиля:

class Car < ActiveRecord::Base 
    ## --------------------- Ignore columns patch ------ 
    @@ignore_column_pattern = /^car_code/ 

    class << self 
    alias :all_columns :columns 
    def columns 
     @columns_filt ||= all_columns.reject { |col| col.name =~ @@ignore_column_pattern } 
    end 
    end 

    alias :all_attribute_names :attribute_names 
    def attribute_names 
    @attr_names_filt ||= all_attribute_names.reject { |att| att =~ @@ignore_column_pattern } 
    end 
    ## -------------------/Ignore columns patch ------ 
end 

От: https://stackoverflow.com/a/10319903/1042324

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