Почему является Инди 9 включенными с Delphi 2009? Действительно ли безопасно использовать?

Я исправил ошибки, которые получил после того, как опробовал большинство рекомендаций без решений. Я начал с просмотра ассоциаций моделей и отключения одного из методов, таких как inverse_of, accepts_nested_attribute_for и attr_accessor, один за другим.

До

class UserActivity < ApplicationRecord

    # ----ASSOCIATION OF MODELS----

    # a UserActivity belongs to a User
    # and UserActivity belongs to an Activity
    belongs_to :user, inverse_of: :user_activities
    belongs_to :activity, optional: true, inverse_of: :user_activities 

    attr_accessor :user_activity_date, :user_activity_start,  :user_activity_end, :user_activity_note, :activity_id, :user_id

    accepts_nested_attributes_for :activity, :user

    # ----MODEL VALIDATIONS----
    validates_presence_of :user_activity_end, presence: true, null: false, :message => "cannot be empty"
    validates_presence_of :user_activity_start, presence: true, null: false, :message => "cannot be empty"
    validates_presence_of :user_activity_date, presence: true, null: false, :message => "cannot be empty"
    validates_presence_of :user_activity_note, presence: true, length: { minimum: 10 }, null: false, :message => "cannot be empty"

    validates :user, presence: true
    validates :activity, presence: true
end

После

class UserActivity < ApplicationRecord

    # ----ASSOCIATION OF MODELS----

    # a UserActivity belongs to a User
    # and UserActivity belongs to an Activity
    belongs_to :user, inverse_of: :user_activities
    belongs_to :activity, optional: true, inverse_of: :user_activities 

    accepts_nested_attributes_for :activity, :user

    # ----MODEL VALIDATIONS----
    validates_presence_of :user_activity_end, presence: true, null: false, :message => "cannot be empty"
    validates_presence_of :user_activity_start, presence: true, null: false, :message => "cannot be empty"
    validates_presence_of :user_activity_date, presence: true, null: false, :message => "cannot be empty"
    validates_presence_of :user_activity_note, presence: true, length: { minimum: 10 }, null: false, :message => "cannot be empty"

    validates :user, presence: true
    validates :activity, presence: true
end

Результаты консоли

Started POST "/user_activities" for 127.0.0.1 at 2019-01-18 02:11:27 +0100
Processing by UserActivitiesController#create as HTML
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"Z6DP3METaYH2oczN11Mpewy4K4E1Gj+24twDM4NHI0y2abKn1CnW1M9993+u+3+9Gh4Rmz/k9g+/pVIpCltSNQ==", "user_activity"=>{"activity_id"=>"2", "user_activity_date"=>"2018-12-18", "user_activity_start"=>"09:56", "user_activity_end"=>"11:00", "user_activity_note"=>"still testing for errors in the app"}, "commit"=>"Create User activity"}
   The activity ID which is received is -> 2
   Date -> 2018-12-18
   Start Time -> 09:56
   End Time -> 11:00
   Activity Note -> still testing for errors in the app
       User Load (0.7ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
       ↳ app/controllers/user_activities_controller.rb:54
       (0.4ms)  BEGIN
       ↳ app/controllers/user_activities_controller.rb:57
       UserActivity Create (0.7ms)  INSERT INTO `user_activities` (`user_activity_date`, `user_activity_start`, `user_activity_end`, `user_activity_note`, `created_at`, `updated_at`, `user_id`, `activity_id`) VALUES ('2018-12-18 00:00:00', '09:56:00', '11:00:00', 'still testing for errors in the app', '2019-01-18 01:11:28', '2019-01-18 01:11:28', 1, 2)
       ↳ app/controllers/user_activities_controller.rb:57
       (0.4ms)  COMMIT
       ↳ app/controllers/user_activities_controller.rb:57
Redirected to http://localhost:3000/user_activities/7
Completed 302 Found in 111ms (ActiveRecord: 4.3ms)

У меня было accepts_nested_attribute_for [ 1111] в модели UserActivity и используемые переменные были точно такими же, как и у уже установленных атрибутов, и поэтому они конфликтовали.

Сразу после того, как я отключил это, я смог сохранить в базу данных, и теперь все работает хорошо.

Я благодарю вас за вашу поддержку, поскольку они дали мне представление о том, куда направить мою технику поиска ошибок.

6
задан RRUZ 15 April 2011 в 06:31
поделиться

5 ответов

Существует открытый отчет королевского адвоката об этом, но это только видимо королевскому адвокату sysops.

Состояние "открытых" обычно означает, что признано, что это - ошибка, а не дизайном.

Remy Lebeau - один из разработчиков Инди - сказал это:

Установщик 2009 года действительно поставляет с Инди 9 исходных кодов, но это не можно выбрать во время установки. Существует примечание в документации, что Инди 9 может быть установлена вручную в случае необходимости. Но имейте в виду, что Инди 9 не была обновлена для фактической поддержки 2009. В данный момент я не уверен, будет ли это.

6
ответ дан 8 December 2019 в 17:28
поделиться

Существуют некоторые изменения в Инди 9 (от версии 2007 года) так, чтобы она скомпилировала под Delphi 2009 (некоторые Строка к изменениям AnsiString), но на основе моих тестов она не работает. Это пытается, но не соединяется. Если Вы хотите, я могу дать Вам изменения, которые были добавлены для поддержки Unicode, но я не полагаю, что они достаточны.

Я не могу действительно ответить почему. Я мог предугадать несколько причин, но у меня нет служебной информации.

Действительно ли безопасно использовать? YMMV. Существует много к Инди, таким образом, могут быть некоторые части, которые хорошо работают для Вашего проекта. Даже простой тест с TIdTCPClient привел к Ошибке Сокета № 11004 каждый раз. То же для TIdHTTP. Кажется, что я попробовал MD5 ранее, и это просто получило мусор, но я не уверен в том.

Ответ: Это было включено по ошибке (предположение), и не безопасно использовать (на основе ограниченных тестов).

Это неудачно, потому что Инди 10 имеет проблемы также, и у меня есть некоторые приложения прежней версии та Инди использования 9.

3
ответ дан 8 December 2019 в 17:28
поделиться

Indy9 там для совместимости. Были некоторые повреждающиеся изменения в Indy10 (Ваш код, который был написан против Indy9, может не скомпилировать под Indy10), таким образом, у Вас есть опция продолжения использовать Indy9 (я думаю, что установщик запрашивает и спрашивает, какую Инди Вы хотите использовать - по крайней мере, это сделало с D2007).

Обновление: Хорошо несколько человек правильно прокомментировали, что привычка Indy9 компилирует с D2009 (из-за новой поддержки Unicode), таким образом, я предполагаю, что не знаю, почему это там.

3
ответ дан 8 December 2019 в 17:28
поделиться

Мое предположение, это было в исходном дереве и было автоматически включено установщиком.

2
ответ дан 8 December 2019 в 17:28
поделиться

Следует иметь в виду, что исходные файлы не используются, если Вы не говорите Delphi перекомпилировать их. Если у Вас не будет Версии для предприятия, то у Вас даже не будет этих папок.

0
ответ дан 8 December 2019 в 17:28
поделиться
Другие вопросы по тегам:

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