說我有像Rails的這個(通用Q &的網站),一個網站,我想這個「問」頁面W/A文本框的第一頁用戶他看到了,即使他沒有登錄。他輸入了一個問題,在'新'方法中,我檢查他沒有登錄,並將他彈回到/ session/new,他可以登錄或創建一個新帳戶。問題是,我怎麼(以及什麼是最好的辦法)保留他最初通過這個過程所要求的那個問題?保留表單提交在/ Rails中註冊
1
A
回答
0
你把它保留在會話中。所以在登錄後,當用戶回過頭來問他的問題時,你會發現會話中已經有東西了。
你可以直接顯示它。
1
我理解的問題描述的動作的流程是
- 用戶呈現形式
- 用戶重定向到登錄頁面上提交
- 用戶被重定向回表格成功登錄
- 重新填充表單上的問題(問如何做到這一步)
- 用戶最終提交表單。如果用戶登錄
省略步驟2-4。
我很抱歉,但我看到你的問題更多的是比導軌問題的根本UI問題的徵兆。
如果只有登錄的用戶可以發佈問題,那麼爲什麼要顯示文本框? 如果用戶要以任何方式登錄,爲什麼不先把它排除在外。更好的解決方案是集成登錄和表單。
像這樣的觀點:
<% form_for :question do |form| %>
<% unless logged_in? %>
<% fields_for :session do |session_form|%>
<%= session_form.label :login %>
<%= session_form.text_field :login %>
<%= session_form.label :password %>
<%= session_form.password_field :password %>
<%end%>
<%end%>
<%= form.text_area :question %>
<%end%>
和Controller
def new
...
unless params[:session].nil?
self.current_user = User.authenticate(params[:session][:login], params[:session][:password])
end
if logged_in?
flash[:notice] = "Logged in successfully"
else
flash[:error] = "Incorrect username and or password."
end
if logged_in? && @question.save
.... process successful entry
else
... process unsuccessful entry
end
end
編輯:穆罕默德的提高重用跨多個控制器和形式的這種模式的問題。所以答案已經更新,以解決這種模式的重用。
爲了簡化重用,您可以將此塊放入輔助函數,該函數在before_filter中爲需要它的操作引用。
def login
unless params[:session].nil?
self.current_user = User.authenticate(params[:session][:login], params[:session][:password])
if logged_in?
flash[:notice] = "Logged in successfully"
else
flash[:error] = "Incorrect username and or password."
end
end
end
爲:
before_filter :login => :only [:new , :edit, :update, :delete]
在視圖方面,應該不會太難構建的的form_for嵌入了會話參數的新變種。也許是form_for_with_session?
至於處理不成功的響應,我會建議使用一段代碼的幫助函數。對不起,我沒有時間爲你寫出或測試一個。
0
def create
if current_user # Implement this method in your auth framework
@question = Question.new(params[:question] || session.delete[:question])
# (the usual stuff you'd do to save)
else
session[:question] = params[:question]
redirect_to :controller => :sessions, :action => "new"
end
end
然後,在你的用戶創建和身份驗證的東西全在你登錄動作完成後,只要確保你回發到這個create
行動,如果session[:question]
定義。
+0
如果數據不適合Cookie,你會怎麼做? – Mohamad 2012-11-26 16:21:10
相關問題
- 1. 使用ajax提交表單並留在註冊頁面
- 2. 如何在Rails表單提交中保留引號?
- 3. 在php提交後保留表單值
- 4. 試圖實現在Rails的註冊,但是當表單提交
- 5. 註冊表單提交和Java servlets
- 6. PHP AJAX註冊表單提交教程
- 7. 保留提交的JSP表單數據
- 8. Rails:在提交後保留參數
- 9. 註冊表單保持提示錯誤
- 10. 遠程提交註冊表
- 11. 提交表單並保留值設置
- 12. PHP在提交表單失敗後保留表單信息
- 13. javascript在表單提交後保留列表中的選定值
- 14. 在新用戶註冊時保留表單值(設計)
- 15. Rails表單提交
- 16. Django保留註冊信息
- 17. 在提交後保留值
- 18. 提交表單後保留動態表單域值
- 19. 防止表單提交但保留表單驗證
- 20. ng-model不在表單提交時註冊
- 21. Django提交多個表單並在提交後保留字段數據輸入
- 22. 將表單提交給Servlet後,如何在JSP中保留HTML表單域值?
- 23. 表單提交在rails 3中
- 24. 無法在Rails中提交表單
- 25. 在django上提交表單並提交錯誤後,保留字段的數據
- 26. 在表單提交後保留輸入值(附帶)
- 27. 如何在成功提交表單後保留變量的值
- 28. 如何在表單提交之間保留ModelMap?
- 29. 在表單提交後保留顯示的div
- 30. 如何在表單提交後保留下拉選定的值?
如果數據太大而無法存儲在Cookie中,並且您將Cookie用作會話存儲,則會失敗。 – Mohamad 2012-11-26 16:23:05
那麼,你可以隨時存儲一個id,然後將真實數據保存在數據庫中。但是將數據庫存儲爲會話存儲會更有效率。基本上:這就是我們使用Cookie以外的會話存儲的原因。 – 2012-11-30 17:26:13