insert into with only filfull fields

Hello,
  when i create a record, User.create(:login=>'john', :password =>
'password'), active record behaviour is to include every of my fields
in the SQL query :
INSERT INTO users ("login", "password", "another_column",
"yet_another_column") VALUES('john', 'password', NULL, NULL)

But i want active record to just include filfulled fields in the
query:
  INSERT INTO users ("login", "password") VALUES('john', 'password')

how can i change it?

Is there any reason you want to do this? This is ActiveRecord’s default behaviour and changing it would be a pain.

yes my database has some triggers: some fields are "NOT NULL" but
triggers put the good values inside.

You could move the triggers into the model, depending on what they do.

no i can't: this database is not only acceed my rails processes, we
have some java tasks too.
I think the better way is to modify our triggers.

Jean-sébastien Jney wrote:

no i can't: this database is not only acceed my rails processes, we
have some java tasks too.
I think the better way is to modify our triggers.

You could try adding this to your user model,

  ignore_column "another_column"
  ignore_column "yet_another_column"

after extending ActiveRecord::Base with

class ActiveRecord::Base
  def self.ignore_column(column_name)
    case column_name
      when String, Symbol
      self.columns_hash.delete(column_name.to_s)
      self.columns.delete_if {|c| c.name == column_name.to_s}
      when Regexp
      self.columns_hash.delete_if { |k,v| column_name.match(k)}
      self.columns.delete_if { |c| column_name.match(c.name)}
    end
  end
end

Or do you need to read these columns as well?

Stephan

yes i need to read them :(. I already use same kind of hack on other
fields.

Jean-sébastien Jney wrote:

yes i need to read them :(. I already use same kind of hack on other
fields.

On Jan 9, 2:04 am, Stephan Wehner <rails-mailing-l...@andreas-s.net>

In that case you can extend the User model with a UserWrite model, which
has those columns hidden. The UserWrite model is only used by the
controller for updates/inserts.

Stephan

ok, i'll try your solution, thanks everyone for so quick answers