2013-01-14 6 views
8

Mam podstawowy formularz przy użyciu helpera form_tag działa dobrze, ale chcę dodać przycisk anulowania, jaka jest składnia tego? Chcę, aby przycisk anulowania pojawiał się jako przycisk, a nie jako link, a następnie przenieś użytkownika na inny adres URL (co oznacza, że ​​nie chcesz przesłać formularza).Ruby on Rails: jak zaimplementować przycisk Cancel w formula_tag

TY, Fred

+0

co chcesz zrobić? – hdgarrood

Odpowiedz

21

Jeśli chcesz wyczyścić/zresetować pola formularza, rób to, co sugeruje dchacke.

Jednak ja generalnie spodziewać się przycisk Anuluj, aby nie usunąć formę, ale żeby mnie zabrać z postaci, co oznacza, że ​​nie planują złożenie go.

Jeśli chcesz to ostatnie, to bym po prostu zrobić link (lub przycisk) do strony, którą chcesz przejść po anulowaniu, takich jak:

=link_to 'Cancel', my_page_path 

Albo jeśli chcesz przycisk:

= button_tag "Cancel", :type => 'button' 

Następnie dodać do tego kontrolera:

before_filter :check_for_cancel, :only => [:create, :update] 

def check_for_cancel 
    if params[:commit] == "Cancel" 
    redirect_to my_page_path 
    end 
end 
+0

Czy powyższe spowoduje, że link Anuluj pojawi się jako przycisk? Właśnie tego chciałbym. –

+0

Zaktualizowałem odpowiedź – 99miles

+0

Dzięki, wygląda dobrze, otrzymuję błąd "ActionView :: Szablon :: Błąd (niezdefiniowana metoda' button_tag 'dla # <# : 0xb2a2e4d4>): "teraz jednak wygląda nie podoba się element button_tag? –

22

Jeśli masz na myśli przycisk zerowania, wklej następujący wewnątrz formularza:

<%= button_tag "Reset", type: :reset %> 

przetestowane, działa dobrze i resetuje wszystkie pola w formularzu.

+0

Niestety, powinno być wyraźniej, nie chcę resetować pól, anuluję, aby przerwać formularz i przejść do innego adresu URL. –

2

zamiast tagu przedstawienia, chciałbym zaproponować <button> tag ponieważ parametr :commit może być zlokalizowany, co sprawia, że ​​jest to trudny do oszacowania w kontrolerze.

A button_tag może mieć nazwa/wartość jak każdy inny polu, więc można w zasadzie utworzyć flagę z nim.

Poniższy kod jest to, czego używam:

w widoku:

<%= button_tag t('buttons.cancel'), type: "submit", name: "cancel", value: true %> 

w kontrolerze:

before_filter :redirect_cancel, only: [:create, :update] 

private 

def redirect_cancel 
    redirect_to my_page_path if params[:cancel] 
end 

Znacznie czystsze imho, ponieważ można polegać na flagę zamiast (potencjalnie) zlokalizowanej wartości wyświetlanej.

1

button_to wydaje się być prostym sposobem na osiągnięcie tego samego, ale musi być umieszczony poza samą formą, ale można to łatwo naprawić za pomocą css.

Aby rozwiązać ten problem w bardziej ogólny sposób (również w celu edycji zasobów zagnieżdżonych w zasobach, które nie zostały jeszcze utrwalone), można utworzyć osobny formularz dla anulowania zawierający wszystkie oryginalne wartości jako ukryte pola .