1 )
Sprawa wygląda tak, mam sobie metody active i block
np:
[code] def active @app_type = ApplicationsTyp.find(params[:id].to_i) @app_type.active = true @app_type.save
redirect_to admin_list_app_type_path
end
def block @app_type = ApplicationsTyp.find(params[:id].to_i) @app_type.active = false @app_type.save
redirect_to admin_list_app_type_path
end[/code]
jak jest dobrze to w logach leci:
Started GET "/admin/list/app_type" for 89.79.218.16 at 2013-01-16 00:57:01 +0100
Processing by Admin::ApplicationsTypController#index as HTML
ApplicationsTyp Load (0.4ms) SELECT `applications_typs`.* FROM `applications_typs` WHERE `applications_typs`.`id` = 1 LIMIT 1
(0.2ms) BEGIN
(0.4ms) UPDATE `applications_typs` SET `active` = '1', `updated_at` = '2013-01-15 23:57:01' WHERE `applications_typs`.`id` = 1
[paperclip] Saving attachments.
(194.8ms) COMMIT
ApplicationsTyp Load (0.5ms) SELECT `applications_typs`.* FROM `applications_typs` ORDER BY name ASC LIMIT 10 OFFSET 0
Rendered admin/applications_typ/index.html.erb within layouts/application (5.9ms)
Admin Load (0.2ms) SELECT `admins`.* FROM `admins` WHERE `admins`.`id` = 1 LIMIT 1
CACHE (0.0ms) SELECT `admins`.* FROM `admins` WHERE `admins`.`id` = 1 LIMIT 1
Rendered admin/_top.html.erb (12.1ms)
Rendered admin/_bottom.html.erb (0.4ms)
Completed 200 OK in 240ms (Views: 26.4ms | ActiveRecord: 198.8ms)
Ale ten dla kilku rekordów kod się nie wykonuję (ta sama tabela, te sam kod) Wtedy w logach nie mam np.
(0.4ms) UPDATE `applications_typs` SET `active` = '1', `updated_at` = '2013-01-15 23:57:01' WHERE `applications_typs`.`id` = 1
[paperclip] Saving attachments.
(194.8ms) COMMIT
tak jak by update w ogólnie nie leciał do bazy… nie mam pojęcia o co chodzi.
Ma ktoś jakiś pomysł o co tu chodzi. Mam nadzieję, że wyjaśniłem o co chodzi.
2 )
Na serwerze localnym strona mi śmiga jak nie wiem. na docelowym już czasem zwalnia… Czy to kwestia samego serwera czy aplikacji (nie ma jakiś skomplikowanych wyliczeń kilka SELECTów itp)
validates_presence_of :small, :message => "wybierz plik z dysku" , :on => :update
validates_presence_of :big, :message => "wybierz plik z dysku" , :on => :update
validates_presence_of :screen, :message => "wybierz plik z dysku" , :on => :update
Jak zamienie save na save! to błąd…
translation missing: pl.activerecord.errors.messages.record_invalid brakuje mi czegoś w plikach językowcach ale to bez znaczenie skąd ten błąd, jak wywołać tego save tak by nie brał pod uwagę validacji w ogóle.
Dodam, że na lokalnym serwerze nie miałem takiego problemu
A w ogóle, celowe zapisywanie do bazy rekordów, które nie przechodzą walidacji, jest mało eleganckie. Jeśli napisałeś źle walidację modelu, popraw ją, zamiast obchodzić problem.
Nie do końca wiem co robi Twój kod, ale wygląda to na jakąś obsługę zdjęć albo coś w tym stylu. Może warto wyodrębnić kod odpowiedzialny za obsługę tych zdjęć do osobnej klasy lub modelu?
Wtedy ApplicationsTyp ma szanse się zwalidować, bo walidacje będą przeniesione w inne miejsce. Robienie save bez walidacji jest trochę kiepskie jak napisał/a już @Lypa.
to aplikacja do tworzenie promocji i konkursów na facebook (aplikacje można zdalnie instalować na fanpage) nie mogę tego wyodrębnić. Zdjęcia są ściśle powiązane z ApplicationsTyp (można zrobić model ApplicationsTypImages) ale niechce mi się teraz bawić Myślę, że w tym przypadku można validację obejść.