Rails-仅在创建时排除列

时间:2018-09-28 22:22:55

标签: activerecord ruby-on-rails-5

我们可以在创建记录时排除要添加到INSERT语句的列吗?

例如,表students具有idnameskip_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

1 个答案:

答案 0 :(得分:0)

这可能不是一个完整的答案,但是您可以尝试覆盖模型中的attributes_for_create method

这是从最终成为INSERT查询的内容中删除PK的方式。

您的Student类将具有

  private

  def attributes_for_create(attribute_names)
    super.reject { |a| a == "some_attribute" }
  end