Создание объекта в базе данных без показа пользователю - PullRequest
0 голосов
/ 17 марта 2010

У меня есть контроллер с действием new, и я хочу, чтобы он создал объект-потомок ActiveRecord :: Base и записал его в базу данных (не показывая его пользователю).

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

Order.new создает локальный объект, но мой вопрос - как заставить Rails заполнить его значениями по умолчанию и записать в базу данных?

Ответы [ 2 ]

1 голос
/ 17 марта 2010

Вы можете записать несохраненный экземпляр объекта ActiveRecord в базу данных с помощью метода save:

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

Однако он не будет заполнять столбцы автоматически.Если вы хотите заполнить его значениями по умолчанию, вы можете сделать это перед вызовом save:

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

Или вы можете передать его при вызове new:

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

Если вы хотитеСделайте что-нибудь более интересное, вы можете сделать так, чтобы Rails автоматически заполнял поля при сохранении, добавляя что-то подобное в модель:

before_validation_on_create :set_default_values

def set_default_values
  field_name = "foo" if field_name.blank?
end
0 голосов
/ 17 марта 2010

вы можете использовать Order.Create(...), который создаст новый объект и сохранит его в базе данных (при условии, конечно, что Order является дочерним элементом ActiveBase)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...