как activerecord знает для выполнения вставки или обновления?

Несколько глюков:

  • , При попытке использовать обоих без каких-либо плагинов/интеграции, необходимо бояться редактировать регионы, отмеченные, "НЕ РЕДАКТИРУЮТ", поскольку Netbeans будет перезаписывать код в тех разделах вполне часто.
  • необходимо использовать команду "Customize..." для добавления пользовательского кода init для компонентов.
  • Добавляющие/создающие новые компоненты на форме с помощью кода Java не будут отражены в редакторе GUI.
  • Разработчики должны быть отговорены войти в код и добавить настройки колебания, эффективно обойдя редактора GUI.

Другая подсказка - то, что можно создать Бобы Java с помощью Eclipse и перетащить их в редактора Matisse. Это позволяет Вам создавать пользовательский компонент графического интерфейса пользователя или некомпонент графического интерфейса пользователя (модели, слушатели, и т.д.) и добавлять его к форме Matisse. Со слушателями и моделями, можно определить компонент для использования экземпляра пользовательского слушателя/модели вместо поведения по умолчанию. Можно также перетащить в пользовательских компонентах графического интерфейса пользователя и управлять ими как любой другой виджет GUI.

13
задан Ryan Bigg 6 November 2009 в 03:20
поделиться

3 ответа

Хотя некоторые люди могут сказать "RTFM", я предпочитаю более подробное описание, но все еще совершенно бесполезное, когда-Rails-3-выходит-и-изменяется -everything ответ:

Как это работает в Rails 2.3 (он же «сегодня»)

save вызывает create_or_update , который выглядит так:

def create_or_update
  raise ReadOnlyRecord if readonly?
  result = new_record? ? create : update
  result != false
end

Вы можете игнорировать первую строку этого метод, поскольку он вызывает ошибку только в том случае, если запись доступна только для чтения (обычно это не так, но может быть в случае объединений). Здесь нас интересуют вторая и третья строки внутри метода.

Вторая строка вызывает new_record? , который определяется следующим образом:

  # Returns true if this object hasn't been saved yet -- that is, a record for the object doesn't exist yet; otherwise, returns false.
  def new_record?
    @new_record || false
  end

И переменная @new_record устанавливается, когда initialize ( new вызывает initialize , и дает нам новый объект, здесь вызывается какой-то фоновый Ruby-fu) метод.

Итак, если этот @new_record имеет значение true , он вызовет create , а если он false, то ' Я вызову update , который, я думаю, приведет нас к тому, что вам нужно.

Кроме того, когда вы найдете запись, она не вызывает initialize и, следовательно, не устанавливает ] @new_record . Если вы заметили, код new_record? был @new_record || false , что означает, что он вернет false, если @new_record не был установлен.

Допустим, вы хотите найти последнюю запись Forum , поэтому вы должны сделать Forum.last .

  1. Это вызывает метод last в классе Forum , который наследуется от ActiveRecord ::
23
ответ дан 1 December 2019 в 21:25
поделиться

Он в основном полагается на метод new_record? .
Этот метод возвращает true, если это новая запись, и false, если это не так.

На самом деле это не так уж сложно.

  • Когда вы получаете существующую запись, она не новая. Итак, new_record? может напрямую вернуть false.
  • Когда вы создаете новую запись ( Model.new ), new_record? вернет true. Это новая запись.
  • Когда вы сохраняете эту новую запись, она уже не нова. Обновляется внутренняя переменная @new_record . new_record? больше не будет возвращать истину.

Чтобы узнать, когда это произойдет, перейдите в ActiveRecord :: Base , строка 2911

    self.id ||= new_id

    @new_record = false
    id
  end
2
ответ дан 1 December 2019 в 21:25
поделиться

Ознакомьтесь с документом activerecord здесь и исходный код там .

1
ответ дан 1 December 2019 в 21:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: