2013-01-06 7 views
7

uczę rubin na szynach prowadzi mianowicie „układy i renderowania” temat na http://guides.rubyonrails.org/layouts_and_rendering.htmlDezorientacja związana z przekazywaniem zmiennych instancji do metody redirect_to. Jak widać w Rails Guides

Jestem mylić o przejściu zmienną instancji sposobu redirect_to. Jak to jest możliwe? Pomyślałem, że redirect_to może być przydatne do przekierowania na inną stronę internetową lub adres URL.

W przykładach podanych w przewodniku mówi co następuje:

2.2.2 Renderowanie skargę widoku

Jeśli chcesz renderować widok, który odpowiada innej akcji zasięgu tego samego szablonu, można użyć render z nazwą widoku :

def update 
    @book = Book.find(params[:id]) 
    if @book.update_attributes(params[:book]) 
    redirect_to(@book) 
    else 
    render "edit" 
    end 
end 

Renderowanie "edytuj" ma pełny sens, spowoduje ponowne wyświetlenie tej nowej formy. Ale co się dzieje na świecie z redirect_to(@book)? Czym dokładnie będzie to renderować i w jaki sposób zostanie przekierowany obiekt książki? BTW, model książka ma kolumn, nazwa, autor, stron itp ...

Odpowiedz

18

redirect_to documentation

redirect_to (options = {}, response_status = {}) Przekierowuje przeglądarkę do celu określonego w opcjach. Nagrywanie - Adres URL zostanie wygenerowany przez wywołanie url_for z opcjami, które będą odwoływać się do nazwanego adresu URL dla tego rekordu .

Więc kiedy ktoś robi redirect_to(@book)@book to specyficzny zapis z id.

W ten sposób jako szablon wykorzystywana jest metoda skojarzonych rekordów (w tym przypadku @book) show.

Oprócz wyżej, jeśli spojrzeć na plik routes.rb który określa te ścieżki można zauważyć

resources :books 

Teraz trasa ta jest zasadniczo tłumaczone jako (można zobaczyć uruchamiając rake routes)

books GET /books(.:format)     books#index 
      POST /books(.:format)     books#create 
new_book GET /books/new(.:format)    books#new 
edit_book GET /books/:id/edit(.:format)   books#edit 
    book GET /books/:id(.:format)    books#show 
      PUT /books/:id(.:format)    books#update 
      DELETE /books/:id(.:format)    books#destroy 

Zwróć uwagę na book GET /books/:id books#show - który zostanie dopasowany, gdy wykonasz redirect_to(@book)

+0

Doskonały. Dziękuję Ci bardzo! Chrystal jasne! –

+0

dzięki za to! oczyściłem to dla mnie –

0

To będzie przekierowywać do książki, na przykład "/ książki/65"

+0

Powiedzmy, że URL to/myapp/books/65 i 65 przechodzi przez parametr hash, co dokładnie jest przekierowaniem (@book). To zabierze mnie do strony, która pokazuje szczegóły książki 65? A co z haszem params, który ma params [: book] .. Co to jest? Metoda post post, która zawiera wszystkie rekordy? –

Powiązane problemy