2010-01-24 94 views
0

我是Ruby on Rails的新手,我用裏面的複選框創建了一個表單。我在這裏問了如何用params得到檢查值,然後讓它工作。現在的想法是如果我點擊某個按鈕來執行一些操作,如果我點擊另一個按鈕,然後執行anoother操作,但回發後總是停留在同一頁面。提交表單後出現問題

現在正在發生的事情是,我正在進行的動作,但同時到另一個網址。例如:

我有以下形式在我看來:

form_tag delete_profiles_path, :method => :put do 
    submit_tag 'Delete' 

    @my_announcements.each do |ann| 
     check_box_tag 'announcement[]', ann.id 
     end 
    end 

我的配置控制器:

def delete 
    #some action 
    end 

而且routes.rb中:

map.resources :profiles, :collection => {:delete => :put} 

這將重新定向後提交到:

/型材/完整的,和我的形式是在 /型材/一些ID /我-公告

另外,如果我添加另一個按鈕,如刪除一個,如何在點擊它們時處理多個操作,但是處於相同的URL?

+0

你能澄清 - 另一個按鈕會做什麼? – tfwright 2010-01-24 22:53:15

+0

這只是一個例子。請不要關注控制器的任何功能,如「刪除」,「編輯」或其他「標準」方法。我只想從列表中選擇項目,然後單擊某個按鈕並在回發之後執行在同一頁面上停留的操作(如我在第一個回答下面的評論中所述)。 – 2010-01-25 00:37:17

回答

0

首先,你爲什麼用PUT而不是DELETE刪除HTTP方法?您應該使用默認方法進行刪除:使用:method => :delete和控制器#destroy操作(您也可以使用delete,但它像新顯示您想要執行的操作,而destroy就像update)。

用於提交表單的按鈕的第二個名稱發送到params,因此您可以區分使用哪個按鈕提交表單的bu參數。你可以在Rails中不能「保持在同一頁面上」(或者它可能,但是對Rails來說不是)。這應該是這樣的:

  1. 提交表單動作在控制器,大多數時間其網址爲相同「/簡檔/」或「/簡檔/ ID」和動作是傑出的BU方法(POST, PUT或DELETE)

  2. 區分你想要做什麼並嘗試完成操作。如果這是不可能的(例如驗證錯誤),那麼只需顯示與實際值相同的形式,並顯示錯誤爲何無法完成。如果用戶刷新頁面,並再次提交參數,他應該得到相同的頁面和相同的錯誤,並且該操作也不應該完成。

  3. 如果此控制器完成請求,則重定向到其他頁面。它是這樣工作的,因爲如果用戶刷新頁面,那麼(如果它被重定向)沒有任何事情發生,他會回到新頁面。如果你不重定向用戶會再次進行相同的操作,這並不總是你想要的。這個新頁面可以是其中的形式從課程

+0

好吧。我想要做的是在用戶通過選中複選框從列表中選擇項目時執行一些操作。一旦他們點擊了他們想要的按鈕(刪除只是一個例子),我希望網站留在同一頁面,這不是我要求的瘋狂。假設您使用的是Gmail,並且您希望選擇五項內容,然後點擊存檔,您不會被重定向到另一個網址,那麼您將與以前相同。我只是想這樣做。謝謝。 – 2010-01-25 00:35:19

+0

@Brian你確定Gmail保持在同一頁面上?我檢查了'基本的HTML'(只是使用基本的HTML,而不是花哨的JavaScript)版本,它在提交後會重定向,所以對我來說就像我在回答中所示。它沒有使用RESTfull網址,但這是另一回事。如果你想在沒有頁面重新加載的情況下執行它,那麼你需要Ajax,但它稍微複雜一些。 – MBO 2010-01-25 07:43:30

+0

那麼,我使用「花哨」版本,當我選擇多個電子郵件,然後單擊「標記爲已讀」,它將使用ajax。所以,再次,我的問題是我怎麼能在一個表單中有多個ajax提交? – 2010-01-25 12:09:53

0

嘛提交頁面,

如下我可以部分解決這個用ajax:

remote_form_for :profile, :url => {:controller => 'announcements', :action => 'deactivate'}, :html => { :method => :put} do |f| 
    f.submit 'Publish', :confirm => 'Are you sure?' 

這個偉大的工程。我現在想要做的是添加另一個「提交」或按鈕,所以我可以執行多個操作,所以我猜想remote_form_for上的:url語句將被替換爲每個按鈕的那樣。例如:

發佈按鈕:在某些控制器中執行某些操作。 取消激活按鈕:執行另一個。

是否清楚?