Несколько глюков:
Другая подсказка - то, что можно создать Бобы Java с помощью Eclipse и перетащить их в редактора Matisse. Это позволяет Вам создавать пользовательский компонент графического интерфейса пользователя или некомпонент графического интерфейса пользователя (модели, слушатели, и т.д.) и добавлять его к форме Matisse. Со слушателями и моделями, можно определить компонент для использования экземпляра пользовательского слушателя/модели вместо поведения по умолчанию. Можно также перетащить в пользовательских компонентах графического интерфейса пользователя и управлять ими как любой другой виджет GUI.
Хотя некоторые люди могут сказать "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
.
last
в классе Forum
, который наследуется от ActiveRecord :: Он в основном полагается на метод 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