Problem z zapisem danych

Hej,

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… :confused: 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)

a może te rekordy się nie walidują? próbowałeś zmienić save na wersję z wykrzyknikiem?

Faktycznie działa

Za komentowałem w modelu

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 :confused:

jeśli chcesz zapisać rekord bez walidacji to .save(:validate => false)

a co do 2 - jakie środowisko, jaki serwer aplikacji etc :wink:

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.

rzuca się przy zmianie pola avtice na “0” albo “1”
validacja się rzuca o to że 3 pola tekstowe są nie wypełnione.

Nie wiem jak poprawić validację

może Ty wiesz jak

wyłączyć to:

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 chcemy tylko aktywować albo blokować…

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ć :confused: Myślę, że w tym przypadku można validację obejść.