我想要一個任何人都可以填寫的表單,但必須先登錄才能提交 - 如果沒有,請將流程置於保留狀態,直到他們完成。暫停創建操作
我的思考過程是,如果有人遇到表單,它會檢查它們是否已登錄,如果不是,用戶仍然可以填寫表單,而是提示登錄或註冊,而不是「提交」。如果他們點擊任一鏈接(登錄/註冊),我希望它保存表單數據,最有可能是會話,讓他們登錄/註冊,然後讓計算機檢查是否有保存的表單,如果是,則顯示一個確認,如屏幕,新註冊的用戶可以接受它。
我已經發布了代碼,以下我認爲它會工作,但事實並非如此 - 我在想,知道軌道,這可能是一些慣例,要做得更快,更容易!
我不相信我傳遞表單數據的方式是正確的,所以如果任何人都可以糾正我,那就太好了!
查看
<%= form_for :comment, :url => {:action => 'create'} %>
form fields here
<% if current_user %>
<%= f.submit "Submit" %>
<% else %>
<%= link_to "Log In", save_to_session_and_log_in_path(:comment => :comment) %> or
<%= link_to "Sign Up", save_to_session_and_sign_up_path(:comment => :comment) %>
<% end %>
控制器
def save_to_session_and_log_in_path
session[:temp_comment] = Comment.new(params[:comment])
redirect_to log_in_path
end
def save_to_session_and_sign_up_path
session[:temp_comment] = Comment.new(params[:comment])
redirect_to sign_up_path
end
用戶*控制器
def create
#Normal create action, under the redirect:
if session[:temp_comment]
redirect_to confirm_comment
else
redirect_to users_home_page
end
end
我收到的錯誤是:
ActiveRecord::RecordNotFound in CommentsController#show
Couldn't find Comment with id=save_to_session_and_log_in
Rails.root: scrubbed
Application Trace | Framework Trace | Full Trace
app/controllers/comments_controller.rb:87:in `show'
Request
Parameters:
{"comment"=>"comment"
"id"=>"save_to_session_and_log_in"}
我試圖調整它都不爲過,但它仍保持讓我在這裏,所以我無法測試,如果我的任何代碼工作
難道只是'session [:temp_comment] = params [:comment]'?該評論是否正確顯示在URL參數中? – 2013-02-17 02:28:45
@ mind.blank我更新了這篇文章,我不知道我們的哪個解決方案可以工作,因爲我無法通過上面的錯誤 – cadlac 2013-02-19 03:41:18
看起來像你不能在會話中保存ActiveRecord模型。相反,你可以保存params [:comment] – 907th 2013-02-19 05:20:31