레일스에 이와 비슷한 사이트 (일반 Q & A 사이트)가 있고이 "요청"페이지가 사용자에게 첫 번째 페이지로 표시되기를 원한다고 가정 해 봅니다. 그가 로그인하지 않더라도 본다. 그는 질문을하고, '새로운'방법으로 로그인하지 않았는지 확인하고/session/new로 반송한다. 여기서/login/new 계정으로 로그인하거나 새 계정을 만들 수있다. 문제는, 내가이 과정을 통해 처음에 물었던 그 질문을 어떻게 보존 할 것인가? (그리고 그 최선의 방법은 무엇인가?)Rails에서 로그인/등록을 통한 양식 제출 유지
답변
세션에서 유지하십시오. 따라서 로그인 한 후 사용자가 질문에 다시 들어가면 이미 세션 중에 어떤 것이 있음을 알 수 있습니다.
그리고 직접 표시 할 수 있습니다.
내가
- 사용자가
- 사용자가 페이지에 로그인 할 때 리디렉션되는 양식이 제공되는이
- 사용자가 제출 될 수있는 질문에 설명 된 작업의 흐름을 이해하고있어이 다시 리디렉션
- 사용자가 마지막으로 자신의 양식을 제출 (질문이 단계를 수행하는 방법을 묻는) 부하에
- 다시 채 웁니다 양식에 성공 로그에 형성한다. 생략 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%>
그리고 컨트롤러의
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?
는 실패 응답 처리에 관해서는, 나는 코드 블록을 취 도우미 함수를 제안합니다. 죄송합니다. 필자에게 편지를 쓰거나 테스트 할 시간이 없습니다.사용자 생성 및 인증 물건이 모든 로그인 조치를 완료 한 후
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
그런 다음, 단지 session[:question]
가 정의되어있는 경우 당신이 다시이 create
행동에 게시합니다.
데이터가 쿠키에 맞지 않으면 어떻게합니까? – Mohamad
- 1. Ruby on Rails에서 POST 후 양식 데이터 유지
- 2. jquery/ajax를 통한 양식 제출 데이터 전달
- 3. 제출 양식
- 4. 양식 제출
- 5. 양식 제출
- 6. 두 양식 제출 제출 방법
- 7. PHP html 양식 제출 후 선택된 필드 값 유지
- 8. PHP를위한 좋은 디자인과 흐름 - 제출 후 양식 값 유지
- 9. _ 입력란에만 Enter 키를 통한 양식 제출 사용 안 함
- 10. Drupal 양식 제출, 양식 after_build
- 11. 'Enter'키를 누르면 자동으로 양식 제출
- 12. 제출 후 선택 상자 유지
- 13. AJAX 양식 제출 v/s 표준 양식 제출
- 14. Rails에서 양식 필드를 자동으로 채우시겠습니까?
- 15. jquery로 ajax 양식 제출
- 16. HTML 양식 제출
- 17. 웹 인터페이스없이 양식 제출
- 18. JavaScript 대체 양식 제출
- 19. Ext.form.FormPanel 및 양식 제출
- 20. 양식 제출 Mootools
- 21. mootools를 사용하여 양식 제출
- 22. 오큐로 테스트 양식 제출
- 23. 양식 저장 응답 제출
- 24. JQuery Mobile 제출 양식
- 25. 양식 제출 질문
- 26. 페이지로드시 양식 제출 중
- 27. PDF 양식 제출
- 28. 자동 양식 제출
- 29. jEditable - 양식 제출
- 30. 양식 제출 html
데이터가 너무 커서 쿠키에 저장할 수없고 쿠키를 세션 저장소로 사용하는 경우 실패합니다. – Mohamad
글쎄, 항상 ID를 저장하고 데이터베이스에 실제 데이터를 보관할 수 있습니다. 그러나 데이터베이스를 세션 저장소로 저장하는 것이 더 효율적입니다. 기본적으로 이것이 쿠키 이외의 세션 저장소를 사용하는 이유입니다. –