🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.ruby
5 messages
5 total messages Started by Piotr Czeszkiewicz Mon, 09 Jul 2007 08:04
Rails i after_update
#543
Author: Piotr Czeszkiewicz
Date: Mon, 09 Jul 2007 08:04
35 lines
1693 bytes
Witam

Mógłby ktoś mi wytłumaczyć jak przy użyciu funkcji zwrotnych 
after_update lub podobnych wykonać poniższe zadanie.

1. Jest sobie zgłoszenie,
2. Zmianiam stan zgłoszenia na "Zakończone"
3. Chciałbym, aby w tym momencie została wypełniona data zakończenia 
zgłoszenia.

Robię to tak, jak poniżej (czemu nie działa)?

class ZgloszeniaController < ApplicationController

def edit
   @zgloszenie = Zgloszenie.find(params[:id])
   if request.post?
     if @zgloszenie.save
       @zgloszenie = Zgloszenie.find(params[:id])
       flash[:info] = 'Dane zostały zapisane.
     end
   end
   render :action => 'edit', :id => @zgloszenie
end


class Zgloszenie < ActiveRecord::Base

after_update :data_zamkniecia

def data_zamkniecia
   if self.stan == 'Zakończone'
     self.closed_at = Time.now
   end
end
Re: Rails i after_update
#544
Author: Piotr 'piter' Hlawski
Date: Mon, 09 Jul 2007 09:34
57 lines
2836 bytes
Piotr Czeszkiewicz wrote:

> Witam
> 
> Mógłby ktoś mi wytłumaczyć jak przy użyciu funkcji zwrotnych
> after_update lub podobnych wykonać poniższe zadanie.
> 
> 1. Jest sobie zgłoszenie,
> 2. Zmianiam stan zgłoszenia na "Zakończone"
> 3. Chciałbym, aby w tym momencie została wypełniona data zakończenia
> zgłoszenia.
> 
> Robię to tak, jak poniżej (czemu nie działa)?
> 
> class ZgloszeniaController < ApplicationController
> 
> def edit
>    @zgloszenie = Zgloszenie.find(params[:id])
>    if request.post?
>      if @zgloszenie.save
>        @zgloszenie = Zgloszenie.find(params[:id])
>        flash[:info] = 'Dane zostały zapisane.
>      end
>    end
>    render :action => 'edit', :id => @zgloszenie
> end

Po co dwa razy Zgloszenie.find(params[:id])?

> 
> 
> class Zgloszenie < ActiveRecord::Base
> 
> after_update :data_zamkniecia
> 
> def data_zamkniecia
>    if self.stan == 'Zakończone'
>      self.closed_at = Time.now
>    end
> end


Nie działa, bo after_update się co prawda odpali, ale nie zadziała już 
ponowne save na bieżącym obiekcie, a ty wyraźnie chcesz zmieniać wartość
zmiennej instancji _tego_ obiektu. Zrób to before_ - sprawdź w nim czy stan
== 'Zakończone' i ustaw datę.

A przy okazji, nie możesz mieć pola o nazwie updated_at? Rails by ci
automatycznie ustawiał datę, i skoro stan będzie miał wartość 'Zakończone'
to i tak wiadomo będzie, że data która aktualnie znajdować się będzie w
polu updated_at będzie dotyczyła Zakończenia, czyż nie?


-- 
.:: Piter // phlawski$gmail,com // gg: 4534287 ::.
Kiedy Bóg powiedział "Niech stanie się światłość", Chuck Norris
dodał "Powiedz, 'proszę'."
Re: Rails i after_update
#545
Author: Piotr Czeszkiewicz
Date: Tue, 10 Jul 2007 12:38
17 lines
1508 bytes
Piotr 'piter' Hlawski napisał(a):
> 
> Po co dwa razy Zgloszenie.find(params[:id])?

Błąd, w rzeczywistości jest tylko raz.

> 
> A przy okazji, nie możesz mieć pola o nazwie updated_at? Rails by ci
> automatycznie ustawiał datę, i skoro stan będzie miał wartość 'Zakończone'
> to i tak wiadomo będzie, że data która aktualnie znajdować się będzie w
> polu updated_at będzie dotyczyła Zakończenia, czyż nie?
> 

Faktycznie to najlepsze rozwiązanie. Dzięki.

-- 
Piotr Czeszkiewicz
Re: Rails i after_update
#546
Author: Piotr 'piter' Hlawski
Date: Tue, 10 Jul 2007 12:56
18 lines
1863 bytes
Piotr Czeszkiewicz wrote:

>> 
>> A przy okazji, nie możesz mieć pola o nazwie updated_at? Rails by ci
>> automatycznie ustawiał datę, i skoro stan będzie miał wartość
>> 'Zakończone' to i tak wiadomo będzie, że data która aktualnie znajdować
>> się będzie w polu updated_at będzie dotyczyła Zakończenia, czyż nie?
>> 
> 
> Faktycznie to najlepsze rozwiązanie. Dzięki.

Dorób jeszcze pole created_at i będziesz miał komplet informacji :)

-- 
.:: Piter // phlawski$gmail,com // gg: 4534287 ::.
Nie próbujcie tłumaczyć Chuckowi Norrisowi słowa "aerodynamika". Nie
zrozumie. Nie żeby był tępy, po prostu powietrze jak dotąd nie odważyło się
stawiać mu oporu.
Re: Rails i after_update
#547
Author: Piotr Czeszkiewicz
Date: Tue, 10 Jul 2007 19:39
10 lines
1256 bytes
Piotr 'piter' Hlawski napisał(a):
> Piotr Czeszkiewicz wrote:
> 
> Dorób jeszcze pole created_at i będziesz miał komplet informacji :)
> 

To już miałem wcześniej

-- 
Piotrek
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads