2015-10-11 65 views
0

我想要做的東西有點外面的典型的Rails約定的,我想聽聽你們的想法。Ruby on Rails的simple_form_for崗位網址有條件

我有Test模型,具有嵌套Questions,和Question_responses,以及我有一個表格(使用simple_form_for),其中用戶選擇用於在測試的問題的答案。這一切都工作正常,但如果考生認爲問題不好,我想添加Flag功能。現在,我正在使用link_to方法將用戶帶到flag控制器操作中,這些操作允許他們創建標誌,並且我暫時保存測試ID變量以使其返回到測試。這一切都工作。

但是,正如人們所看到的,我並沒有在用戶頭頂創建一個標記之前保存測試的進度 - 所以如果您在測試的一半並標記了一個問題,您將失去進展。我有一個想法,但我不知道它是否能與simple_form工作:

我將資料寄給一些其他的動作tests_controller內,將其保存,重定向到創建flag,然後重定向回測試(在編輯方法或類似的東西),並允許用戶完成測試。這應該可以,但是我怎樣才能得到帶有表單的視圖,將測試數據發佈到表單頂部的simple_form_for @test, url:指定的其他url以外的其他url?有沒有辦法將數據有條件地發佈到另一個url,具體取決於用戶點擊的位置,或者覆蓋簡單形式按鈕對象的協議:submit?我真的不確定,但我覺得以前必須有人做過這樣的事情。

回答

0

萬一別人是一個新的軌道,並設法解決類似的問題,這裏是我做的。

首先,我發現simple_form_for設計張貼到一個URL,這是您在參數指定的simple_form_for功能之一。但是,您可以可以通過在之前執行url 上的一些邏輯,有條件地更改表單發佈到的URL,您可以調用simple_form_for函數(請參閱this後)。

但是,在我的情況,我想張貼取決於其不同的URL「提交」的形式按鈕被點擊。不過,正如我上面所說,這個功能並不是simple_form內置的。從理論上講,我猜想可能有一個javascript函數可以改變表單中的html數據,並在用戶將鼠標懸停在按鈕上時更新表單發佈到的URL,但除非您對JS非常熟悉(不像我)。底線是,有一個更簡單的方法。

但是,您可以更改與窗體的提交按鈕關聯的參數(請參閱this後)。因此,我所做的以及我鼓勵其他人所做的事情是更改與表單中特定按鈕關聯的參數,然後根據需要在表單發佈到的控制器操作中應用邏輯。

就我而言,我創建了兩個按鈕的形式 - 一個按鈕,將提交通常的方式測試數據和一個按鈕用於測試提交當用戶被重定向到一個創建一個標誌。在重定向它們之前,我保存任何已經輸入的表單數據(在tests_controller操作中)。然後用戶被重定向到標誌控制器動作,並且他們可以用典型的導軌方式創建一個標誌。標誌創建完成後,我將它們重定向回測試,但這次是在測試的編輯路徑中。測試數據重新加載,用戶可以繼續創建測試。

如果有人想看看我是如何做到這一點的代碼,請在評論部分告訴我,我會編輯這個答案!