2013-02-17 43 views
2

我想要一個任何人都可以填寫的表單,但必須先登錄才能提交 - 如果沒有,請將流程置於保留狀態,直到他們完成。暫停創建操作

我的思考過程是,如果有人遇到表單,它會檢查它們是否已登錄,如果不是,用戶仍然可以填寫表單,而是提示登錄或註冊,而不是「提交」。如果他們點擊任一鏈接(登錄/註冊),我希望它保存表單數據,最有可能是會話,讓他們登錄/註冊,然後讓計算機檢查是否有保存的表單,如果是,則顯示一個確認,如屏幕,新註冊的用戶可以接受它。

我已經發布了代碼,以下我認爲它會工作,但事實並非如此 - 我在想,知道軌道,這可能是一些慣例,要做得更快,更容易!

我不相信我傳遞表單數據的方式是正確的,所以如果任何人都可以糾正我,那就太好了!

查看

<%= 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"} 

我試圖調整它都不爲過,但它仍保持讓我在這裏,所以我無法測試,如果我的任何代碼工作

+0

難道只是'session [:temp_comment] = params [:comment]'?該評論是否正確顯示在URL參數中? – 2013-02-17 02:28:45

+0

@ mind.blank我更新了這篇文章,我不知道我們的哪個解決方案可以工作,因爲我無法通過上面的錯誤 – cadlac 2013-02-19 03:41:18

+0

看起來像你不能在會話中保存ActiveRecord模型。相反,你可以保存params [:comment] – 907th 2013-02-19 05:20:31

回答

0

什麼是你的CommentsController#創建和#show行動?關於你的錯誤,你能否粘貼save_to_session_and_log_in_pathsave_to_session_and_sign_up_path方法的耙路結果?由於您目前沒有id,因此您應將它們設置爲collection路線。

-

我會做到這一點,雖然是提交表單給不同的控制器將處理每個場景的方式。這樣,您的CommentsController將用於登錄用戶,並且您可以有一個TemporaryCommentsController來照顧客人的評論。

-

另外,根據該意見的領域,我不知道這是否將它們存儲在會話一個偉大的想法。您可能可以在會話中存儲tmp_comment_id並從數據庫中恢復它。另外,使用cron-job刪除所有記錄。 (只有當「評論很大並且很難」序列化「時,這是一個問題)。