开发者

Creating object in database without showing view to user

开发者 https://www.devze.com 2022-12-23 01:12 出处:网络
I have controller with action new, and I want it to create ActiveRecord::Base descendant object, and write it into database (without showing it to user).

I have controller with action new, and I want it to create ActiveRecord::Base descendant object, and write it into database (without showing it to user).

def new
  active_order = current_user.orders.find {|o| o.status > 0 }
  active_order = Order.new if active_order.nil?
  (...)
end

Order.new creates local o开发者_如何学Cbject, but my question is -- how to make Rails to fill it with default values and write to database?


You can write an unsaved ActiveRecord object instance to the database with the save method:

active_order = Order.new if active_order.nil?
active_order.save

It won't fill in the columns automatically, however. If you want to populate it with default values you can do this before calling save:

active_order = Order.new if active_order.nil?
active_order.field_name = "foo"
active_order.save

Or you can pass it in when you call new:

active_order = Order.new(:field_name => "foo") if active_order.nil?
active_order.save

If you want to do something fancier, you can have Rails automatically populate fields when you save by adding something like this to the model:

before_validation_on_create :set_default_values

def set_default_values
  field_name = "foo" if field_name.blank?
end


you can use Order.Create(...) which will create a new object and persist it in the database (assuming Order is a child of ActiveBase of course)

0

精彩评论

暂无评论...
验证码 换一张
取 消