我们可以在创建记录时排除要添加到INSERT语句的列吗?
例如,表students
具有id
,name
,skip_me
列。
s = Student.new(id: 1, name: 'Test')
s.save
# produces
INSERT INTO students(id, name, skip_me) VALUES(1, 'Test', null)
尽管我想要这样的INSERT语句,但没有skip_me
列:
INSERT INTO students(id, name) VALUES(1, 'Test')
我尝试设置s.attributes
来从属性中删除skip_me
,但是它也不起作用。
我只想仅在CREATE上跳过该列,而不是在SELECT和UPDATE上跳过,所以我不能使用ignored_columns
。
答案 0 :(得分:0)
这可能不是一个完整的答案,但是您可以尝试覆盖模型中的attributes_for_create
method。
这是从最终成为INSERT查询的内容中删除PK的方式。
您的Student
类将具有
private
def attributes_for_create(attribute_names)
super.reject { |a| a == "some_attribute" }
end